次の構造を持つDjangoプロジェクトがあります。私のプロジェクト名はSimpleWebです。私はというクエリというアプリケーションを持っています。今私は、ドロップダウンメニューと送信ボタンを持つHTMLページがあります。Django:JavascriptからPython関数を呼び出すことができません
ここに私がやろうとしていることがあります。ユーザーがドロップダウンから項目を選択して送信すると、view.py
ファイルでPython関数を呼び出し、その項目で何かを行い、リストを返します。
問題は、何らかの理由でrunQuery
という名前の関数が呼び出されていないと思います。以下は私のコード
SimpleWeb \です
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^runQuery/$', include('query.urls')),
url(r'^$', include('query.urls')),
]
クエリの\ urls.py urls.py
from django.conf.urls import include, url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^runQuery', views.runQuery, name='runQuery'),
]
view.py
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
# this function powers the main page: 'http://127.0.0.1:8000/'
List = ['item1','item2','item3']
return render(request, 'query/home.html', {'list': List})
def runQuery(request):
# this function needs to be called using $http from javascript
# I want to get what user submitted in $http and do something with it here
# then return a list, below is a sample list
fruitList = ['apple', 'banana', 'orange']
return HttpResponse(fruitList)
script.js
angular.module('myApp', []);
angular.module('myApp').controller('myCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.submitButtonclicked = function(){
var userInput = $scope.data.dropdown /* item that user chooses from dropdown*/
$http({
method: 'GET',
url: '/runQuery',
params: {yourChoice: userInput}
}).then(function successCallback(response){
console.log(response); /* When I debug in chrome browser, I see that it logs an HTML page as the response instead of fruit list */
}, function errorCallback(response) {
console.log("Oops, error occurred");
});
};
}]);
繰り返しますが、私は、関連した、あなたが解決策を見つけるのに役立つかもしれないと思ったコードのほとんどを掲載しました。私の同僚は私のを私のurls.py
ファイルに定義した方法がうんざりしているかもしれないと言っていたので、runQuery()
関数が正しく呼び出されていないのです。私はこれを解決する方法を知らない。ありがとうございました:)
ありがとうございます。しかし、私の 'script.js'ファイルでは' params:{yourChoice:userInput} 'を渡すので、私のrunQuery()関数で' userInput'にアクセスするにはどうすればいいですか? –
ようこそ。 '' request.GET.get( 'yourChoice') ''を使用してrunQueryメソッドでyourChoiceにアクセスできます。 '' –
よろしくお願いします。 –