NoReverseMatch at / Reverse for 'post_detail' 未找到
Posted
技术标签:
【中文标题】NoReverseMatch at / Reverse for \'post_detail\' 未找到【英文标题】:NoReverseMatch at / Reverse for 'post_detail' not foundNoReverseMatch at / Reverse for 'post_detail' 未找到 【发布时间】:2019-02-22 23:28:27 【问题描述】:我正在使用 Python 和 Django 开发一个简单的博客。在我的主页上,我显示 3 个最新帖子,然后是所有帖子。此时我的博客正在运行。但我添加了“显示更多”或“显示文章”链接以在新页面中单独显示帖子,但在加载页面时出现以下错误:
NoReverseMatch at / Reverse for 'post_detail' 关键字参数 ''pk': ''' 未找到。尝试了 1 种模式:['post/(?P[0-9]+)/$']
PS:我正在关注本教程in french(这是英文但有点不同in english here。请注意,我刚刚开始使用 Python 和 Django :)
这是我的代码:
post_list.html(模板)
% extends 'blog/base.html' %
% block latestsnews %
% for latest in latests %
<article class="lastnews">
<h4> latest.title </h4>
<h5 class="lastestcategory"> latest.category </h5>
<p class="bodysmall"> latest.text|truncatewords:10 </p>
<div>
<p class="date"> latest.published_date </p>
<p class="showmore"><a href="% url 'post_detail' pk=post.pk %">Show more</a></p>
</div>
</article>
% endfor %
% endblock %
% block posts %
% for post in posts %
<article class="post">
<header class="postheader">
<h4> post.title </h4>
<p class="info"> post.category , post.published_date </p>
</header>
<p class="bodyregular"> post.text|linebreaksbr </p>
<footer class="postfooter">
<p class="author">Author: post.author </p>
<p class="showarticle"><a href="% url 'post_detail' pk=post.pk %">Show article</a></p>
</footer>
</article>
% endfor %
% endblock %
观看次数
from django.shortcuts import render
from django.utils import timezone
from .models import Category, Post
from django.shortcuts import render, get_object_or_404
def category_list(request):
categories = Category.objects.all()
return render (request, 'blog/post_list.html', 'categories': categories)
def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
latests = Post.objects.filter(published_date__lte=timezone.now()).reverse()[:3]
return render(request, 'blog/post_list.html', 'posts': posts, 'latests': latests)
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', 'post': post)
网址
from django.conf.urls import url
from . 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 'post_detail' pk=post.pk %,在模板上
从 django.shortcuts 导入渲染,get_object_or_404,在视图上
**def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', 'post': post)**, on views
url(r'^post/(?P[0-9]+)/$', views.post_detail, name='post_detail'), 在 url 上
提前致谢!
【问题讨论】:
【参考方案1】:在您的模板中编写:
% for latest in latests %
<!-- ... -->
<p class="showmore"><a href="% url 'post_detail' pk=post.pk %">Show more</a></p>
<!-- ... -->
% endfor %
但第一次出现是之前 % for post in posts %
循环,此时没有post
变量,但是有一个latest
变量(因为它位于@987654325 @loop),因此您可能希望将其替换为:
<p class="showmore"><a href="% url 'post_detail' pk=<b>latest</b>.pk %">Show more</a></p>
【讨论】:
【参考方案2】:如果它是 heroku 网络应用程序,运行 heroku run python manage.py createsuperuser 然后添加一个帖子,如果它是一个本地项目,只需运行 python manage.py createsuperuser 并添加一个帖子
我在创建博客后遇到了同样的问题,但没有添加任何帖子,所以我在“post_detail”/Reverse 找到了这个 NoReverseMatch,关键字参数“'pk': ''' 未找到。尝试了 1 种模式:['post/(?P[0-9]+)/$']-去你的管理员那里添加这些东西
【讨论】:
以上是关于NoReverseMatch at / Reverse for 'post_detail' 未找到的主要内容,如果未能解决你的问题,请参考以下文章
NoReverseMatch at ...... in django
NoReverseMatch at / posts / post / 18 / comment / Django Error
Django NoReverseMatch at / 路径名和/或顺序是不是冲突?
NoReverseMatch at / Reverse for 'post_detail' 未找到
NoReverseMatch at /accounts/password-reset/ 用于 Django 中的密码重置
NoReverseMatch at / Reverse for 'singlepropa' 与参数 '('mens-shirt-1',)' 未找到。已尝试 1 种模式