2016-01-30 70 views
0

我想添加ajax刪除按鈕的我的博客,我想更新頁面時沒有重新加載它,當我刪除一篇文章,但我得到這個錯誤,當我使用ajax和我不明白髮生了什麼問題。NoReverseMatch錯誤使用django與ajax

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

我把自己變成了你,因爲我很難解決這個問題,所以這裏是代碼。

views.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() 

urls.py

url(r'^delete/(?P<slug>[-\w\d]+)/$', views.article_effacer, name="article_effacer"), 

template.html

<input class="delete" id="{{ a.slug }}" data-url='{% url "article.views.article_effacer" a.slug %}' value="Effacer"> 

阿賈克斯

$('.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) 
        } 
       }) 
     }) 

的問題,從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 %} 

回答

2

不能使用這樣的模板標籤,與JS未來值;應該清楚在服務器端解析模板標籤,而根據用戶點擊的內容在客戶端執行JS。

但是,您將價值放在input中。實際上,輸入不具有href屬性,但可以使用data-前綴;問題是你可以在你的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, 
    ... 
}); 
+0

沒有看到我留在輸入中的href,我改變了它和應用與數據前綴的變化,但我仍然得到同樣的錯誤 – Lindow

+0

好點是消除這種邏輯從JS,不只是改變模板。你也這樣做了嗎? –

+0

是的,我剛剛更新了代碼見上文。 – Lindow