在js文件中找不到Django,Ajax url

时间:2017-07-06 08:04:47

标签: javascript jquery python ajax django

我正在使用django,python和javascript制作网站。 我收到错误 '找不到:/ schedule / {%url'schedule_delete'%}'当我在js文件中使用ajax时

fullcalendar.js

function eventElementHandlers(event, eventElement) {
    eventElement
        .click(function(ev) {
            var start = event.start; 
            var id = event.id;
            var title = event.title;

            var allData = {'csrfmiddlewaretoken': '{{ csrf_token }}', "id":id, "start":start, "title":title};
            $.ajax({
                url: "{% url 'schedule_delete' %}", 
                type: "POST",
                data: allData, 
                dataType: "json", 

                success: function(response){
                    alert("success!");
                    $('#used_session'+id).html(response.used_session);

                },
                error:function(error){
                    alert("fail!");
                }
            });
  }

urls.py

from django.conf.urls import url
from . import views

urlpatterns= [
url(r'^$', views.home, name='home'),
url(r'^schedule_delete/$', views.schedule_delete, name='schedule_delete'),

]

我还在views.py中创建了schedule_delete。

为什么网址错了?在另一个模板中,相同的url格式是可以的。根据django模板或js文件,url foramt会有所不同吗?

任何帮助对我都非常有帮助,谢谢!

3 个答案:

答案 0 :(得分:2)

您不能在js文件中使用"{% url 'schedule_delete' %}"。首先需要在html表单的输入中使用此URL,然后使用javascript或jquery读取它。

在html中写。

<button ... id="ajax-button" data-ajax-target="{% url 'named-url' %}">

并在javascript中完成

$.post($("#ajax-button").attr("data-ajax-target"), ... );

这只是一个例子,你可以用其他方式做同样的事情。

答案 1 :(得分:1)

您的javascript文件无法访问django上下文,因为您只是通过django呈现html文件。您需要做的是将您的javascript内嵌到模板中,以便能够访问{%url%}模板标记。

另一种方法是创建例如您设置为您的网址的data-url html属性,并在您的javascript文件中访问该属性。

编辑:

我不确定你的html是什么样的,但我认为你的eventElement是一个按钮。

<button data-url="{% url 'schedule-delete' %}"></button>

单击按钮时,将在js文件中调用事件处理程序:

function eventElementHandlers(event, eventElement) {
    eventElement
        .click(function(ev) {

            ...

            $.ajax({
                url: $(eventElement).data('url'),
                ...

答案 2 :(得分:0)

您正在向网址/schedule/schedule_delete/发出请求,但看起来您的urls.py仅设置为处理网址/schedule_delete/。您是否在主urls.py中包含了日程安排urls.py?

另外,正如另一位回答者所说,你不能在javascript文件中使用django模板变量。