Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将django与ajax一起使用时出现NoReverseMatch错误_Python_Ajax_Django - Fatal编程技术网

Python 将django与ajax一起使用时出现NoReverseMatch错误

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_

我试图在我的博客的删除按钮上添加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_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,
     ...
});