Python 将django与ajax一起使用时出现NoReverseMatch错误
我试图在我的博客的删除按钮上添加ajax,我想在删除文章时更新页面而不重新加载它,但是我在使用ajax时遇到了这个错误,我不知道出了什么问题Python 将django与ajax一起使用时出现NoReverseMatch错误,python,ajax,django,Python,Ajax,Django,我试图在我的博客的删除按钮上添加ajax,我想在删除文章时更新页面而不重新加载它,但是我在使用ajax时遇到了这个错误,我不知道出了什么问题 Reverse for 'article_effacer' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['article/delete/(?P<slug>[-\\w\\d]+)/$'] url.py def article_
Reverse for 'article_effacer' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['article/delete/(?P<slug>[-\\w\\d]+)/$']
url.py
def article_effacer(request, slug):
if request.user.is_authenticated():
user = request.user
article = Article.objects.filter(slug=slug, user=user).delete()
context = {'article':article}
return HttpResponse(json.dumps(context), content_type='application/json')
else:
return HttpResponseForbidden()
url(r'^delete/(?P<slug>[-\w\d]+)/$', views.article_effacer, name="article_effacer"),
问题可能来自url,但我不知道如何更正它,有什么建议吗
更新
完整模板
{% block content %}
{% for a in article %}
<div class="article{{a.slug}}">
[... unrelated html ...]
{% if a.user == user %} |
<input class="delete" id="{{ a.slug }}" data-url='{% url "article.views.article_effacer" a.slug %}' value="Effacer">
{% endif %}
</div>
{% endfor %}
{% endblock %}
{% block javascript %}
<script>
$('.delete').click(function(){
var slug = $(this).attr('id');
var url = $(this).data('url');
$.ajax({
type: "POST",
url: url,
data: {'slug': $(this).attr('id'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: "json",
success: function(response) {
console.log('deleted')
$(".article" + slug).remove();
},
error: function(rs, e) {
console.log(slug)
}
})
})
</script>
{% endblock %}
{%block content%}
{对于项目%]中的项目,}
[…不相关的html…]
{%a.user==user%}|
{%endif%}
{%endfor%}
{%endblock%}
{%block javascript%}
$('.delete')。单击(函数(){
var slug=$(this.attr('id');
var url=$(this.data('url');
$.ajax({
类型:“POST”,
url:url,
数据:{'slug':$(this.attr('id'),'csrfmiddlewaretoken':{{{csrf_token}}},
数据类型:“json”,
成功:功能(响应){
console.log('已删除')
$(“.article”+slug.remove();
},
错误:函数(rs,e){
控制台日志(slug)
}
})
})
{%endblock%}
您不能使用这样的模板标记,其值来自JS;应该清楚的是,模板标记是在服务器端解析的,而JS是根据用户单击的内容在客户端执行的
但是,通过将值放入输入
,您已经完成了一半。实际上,输入没有href
属性,但可以使用数据-
前缀;关键是,你可以在你的JS中抓取它作为URL。比如:
<input class="delete" id="{{ a.slug }}" data-url='{% url "article.views.article_effacer" a.slug %}' value="Effacer">
var url = $(this).data('url');
$.ajax({
type: "POST",
url: url,
...
});
var url=$(this.data('url');
$.ajax({
类型:“POST”,
url:url,
...
});
您不能使用这样的模板标记,其值来自JS;应该清楚的是,模板标记是在服务器端解析的,而JS是根据用户单击的内容在客户端执行的
但是,通过将值放入输入
,您已经完成了一半。实际上,输入没有href
属性,但可以使用数据-
前缀;关键是,你可以在你的JS中抓取它作为URL。比如:
<input class="delete" id="{{ a.slug }}" data-url='{% url "article.views.article_effacer" a.slug %}' value="Effacer">
var url = $(this).data('url');
$.ajax({
type: "POST",
url: url,
...
});
var url=$(this.data('url');
$.ajax({
类型:“POST”,
url:url,
...
});
没有看到我在输入上留下了href,我更改了它并应用了带有数据前缀的更改,但我仍然收到了相同的错误。重点是从JS中删除该逻辑,而不仅仅是更改模板。你也这么做了吗?在当时的上下文中,你有没有一个叫做a
的东西?也许你应该显示完整的模板,以及负责呈现它的视图。没有看到我在输入上留下了href,我更改了它并应用了带有数据前缀的更改,但我仍然收到相同的错误。重点是从JS中删除该逻辑,而不仅仅是更改模板。你也这么做了吗?在当时的上下文中,你有没有一个叫做a
的东西?也许您应该显示完整的模板,以及负责呈现它的视图。
<input class="delete" id="{{ a.slug }}" data-url='{% url "article.views.article_effacer" a.slug %}' value="Effacer">
var url = $(this).data('url');
$.ajax({
type: "POST",
url: url,
...
});