javascript - Django:无法从 Javascript 调用 python 函数

标签 javascript python angularjs django

我有一个具有以下结构的 Django 项目。我的项目名称是SimpleWeb。我有一个名为查询的应用程序。现在我有一个 HTML 页面,其中有一个下拉菜单和一个提交按钮。

这就是我正在尝试做的事情。当用户从下拉列表中选择一个项目并点击提交时,我想在我的 view.py 文件中调用一个 python 函数,对该项目执行一些操作并返回一个列表。

问题是我认为我的名为 runQuery 的函数由于某种原因没有被调用。下面是我的代码

SimpleWeb\urls.py

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

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 的方式可能会困惑,这就是为什么 runQuery() 函数是没有被正确调用。我不知道如何解决这个问题。谢谢你:)

最佳答案

您没有正确定义 URL,因此路由器无法找到正确的方法。定义 URL 的一种方法:

SimpleWeb\urls.py

from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'', include('query.urls')),
]

查询\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

这里需要返回一个JSON对象。使用 HttpResponse 返回它的一种方法是使用 simplejson。

from django.shortcuts import render
from django.http import HttpResponse
from django.utils import simplejson

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 = simplejson.dumps("fruitlist" : ['apple', 'banana', 'orange'])
    return HttpResponse(fruitList, content_type ="application/json")

关于javascript - Django:无法从 Javascript 调用 python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37948066/

相关文章:

javascript - Testcafe过滤功能

javascript - 鼠标悬停停止工作

java - Python 和 Java 中 import 语句的含义有什么区别?

javascript - AngularJS:如果只按下输入键

javascript - 从 JavaScript 中删除的 ClojureScript 模拟是什么?

javascript - 无法使用 .attr() 设置多个属性

python - 打开两个文件时 with 语句中的 SyntaxError

python - 类型错误:列表索引必须是整数,而不是列表。怎么修?

javascript - 使用 foreach 和 switch 循环遍历数组并在 angularjs 中返回不同的值

javascript - AngularJS 过滤器不能很好地工作