我正在使用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会有所不同吗?
任何帮助对我都非常有帮助,谢谢!
答案 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模板变量。