首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用django与ajax的NoReverseMatch错误

使用django与ajax的NoReverseMatch错误
EN

Stack Overflow用户
提问于 2016-01-30 16:52:08
回答 1查看 799关注 0票数 1

我试图在我的博客的delete按钮上添加ajax,我想在删除一篇文章时更新页面而不重新加载它,但是当我使用ajax时,我会得到这个错误,而且我不知道出了什么问题。

代码语言:javascript
复制
Reverse for 'article_effacer' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['article/delete/(?P<slug>[-\\w\\d]+)/$']

我向你求助是因为我很难解决这个问题,下面是代码。

views.py

代码语言:javascript
复制
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()

urls.py

代码语言:javascript
复制
url(r'^delete/(?P<slug>[-\w\d]+)/$', views.article_effacer, name="article_effacer"),

template.html

代码语言:javascript
复制
<input class="delete" id="{{ a.slug }}"  data-url='{% url "article.views.article_effacer" a.slug %}' value="Effacer">

Ajax

代码语言:javascript
复制
    $('.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)
                   }
              })
        })

问题可能来自网址,但我不知道如何纠正,有什么建议吗?

_ 更新

全模板

代码语言:javascript
复制
{% 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 %}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-30 17:00:17

对于来自JS的值,不能使用这样的模板标记;应该清楚的是,模板标记是在服务器端解析的,而JS是根据用户单击的内容在客户机上执行的。

但是,通过在input中放置值,您已经走到了一半。实际上,输入没有href属性,但是可以使用data-前缀;重点是您可以在JS中获取它作为URL。类似于:

代码语言:javascript
复制
<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,
     ...
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35104355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档