我有一個錯誤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寫入不正確,我找不到錯誤。
您應該在url標記中使用'post_like'(url名稱)而不是'like_post'(視圖名稱)。 – v1k45