2016-03-15 46 views
0

我有一個錯誤Reverse for 'like_post' with arguments '()' and keyword arguments '{u'pk': 5L}' not found. 0 pattern(s) tried: []
如何修正'like_post'與參數'()'和關鍵字參數'{u'pk':5L}'未找到反向。 0模式(S)嘗試:[]

我無法修復它,我試圖改變url.py甚至views.py,但問題仍然存在,這是我的代碼:

views.py

from django.http.response import HttpResponse, HttpResponseRedirect 
from django.shortcuts import render, get_object_or_404, redirect, render_to_response 
from django.template import Context 
from django.utils import timezone 
from django.views.generic import View 

from blog.forms import CommentForm, PostForm, SearchForm 
from blog.models import Post 


def post_list(request): 
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')[0:50] 
    return render(request, 'blog/index.html', {'posts': posts}) 


def post_detail(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    return render(request, 'blog/post_detail.html', {'post': post}) 


def add_comment_to_post(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.post = post 
      comment.save() 
      return redirect('blog.views.post_detail', pk=post.pk) 
    else: 
     form = CommentForm() 
    return render(request, 'blog/add_comment_to_post.html', {'form': form}) 


def post_new(request): 
    if request.method == "POST": 
     form = PostForm(request.POST, request.FILES) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.author = request.user 
      post.published_date = timezone.now() 
      post.save() 
      return redirect('post_detail', pk=post.pk) 
    else: 
     form = PostForm() 
    return render(request, 'blog/add_post.html', {'form': form}) 


def search_view(request): 
    if request.method == "POST": 
     search_text = request.POST['search-form'] 
    else: 
     search_text = '' 
    posts = Post.objects.filter(title__contains=search_text) 
    return render_to_response('blog/search.html', {'post': posts}) 


def like_post(request, pk): 
    print pk 
    if pk: 
     post = Post.objects.get(id=pk) 
     post.likes += 1 
     post.save() 
    return HttpResponseRedirect('/like/%s' % pk) 


def dislike_post(request, pk): 
    if pk: 
     post = Post.objects.get(id=pk) 
     post.dislikes += 1 
     post.save() 
    return HttpResponseRedirect('/like/%s' % pk) 

url.py

from django.conf.urls import url 

from blog import views 

urlpatterns = [ 
    url(r'^$', views.post_list, name='post_list'), 
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'), 
    url(r'^post/(?P<pk>[0-9]+)/comment/$', views.add_comment_to_post, name='add_comment_to_post'), 
    url(r'^post/new/$', views.post_new, name='post_new'), 
    url(r'^search/$', views.search_view, name='search'), 
    url(r'^like/(?P<pk>[0-9]+)/$', views.like_post, name='post_like'), 
    url(r'^post/(?P<pk>[0-9]+)/dislike/$', views.dislike_post, name='post_dislike'), 
] 

在模板中,我使用{% url 'like_post' pk=post.pk %},但它不起作用。看來,urls.py寫入不正確,我找不到錯誤。

+0

您應該在url標記中使用'post_like'(url名稱)而不是'like_post'(視圖名稱)。 – v1k45

回答

3

您需要確保url模式的name與url標記中的名稱匹配。

在你的網站上,你使用的名字是post_like

url(r'^like/(?P<pk>[0-9]+)/$', views.like_post, name='post_like'), 

因此,你需要到url標籤更改爲:

{% url 'post_like' pk=post.pk %} 

或者,你可以改變URL的名稱,

url(r'^like/(?P<pk>[0-9]+)/$', views.like_post, name='like_post'), 

,然後URL將工作,因爲它是:

{% url 'like_post' pk=post.pk %} 

就我個人而言,我認爲改變url模式更好。如果您使用like_post作爲視圖名稱和url名稱,則不那麼令人困惑。

+0

你打我吧...:D –

+0

非常感謝你,我現在感覺非常愚蠢,因爲沒有解決這個問題,但老實說,我不知道名稱屬性是如此重要,解決問題後,頁面在我看來,作品依然存在問題,因爲它們不會改變。謝謝 !! :) – zbakh

+0

有時需要第二雙眼來發現問題。如果點數不起作用,最好問一個新問題。 – Alasdair

相關問題