NoReverseMatch at / Reverse for 'post_detail' 未找到
NoReverseMatch at / Reverse for 'post_detail' not found
我正在使用 Python 和 Django 开发一个简单的博客。在我的主页上,我显示了 3 个最新的 post,然后是所有 post。此时我的博客正在运行。但是我添加了 link "Show more" 或 "Show article" 以在新页面中单独显示 post 但是当我加载页面时出现以下错误:
NoReverseMatch at / Reverse for 'post_detail' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['post/(?P[0-9]+)/$']
PS:我正在学习本教程 in french (this one is in English but it is a bit different 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(请求,pk):
post = get_object_or_404(Post, pk=pk)
return 呈现(请求,'blog/post_detail.html',{'post':post})**,在视图上
url(r'^post/(?P[0-9]+)/$', views.post_detail, name='post_detail'), 在 urls
提前致谢!
在你的模板中你写:
{% for latest in latests %}
<!-- ... -->
<p class="showmore"><a href="{% url 'post_detail' pk=post.pk %}">Show more</a></p>
<!-- ... -->
{% endfor %}
但是第一次出现是before {% for post in posts %}
循环,那时候没有post
变量,但是有一个latest
变量(因为它位于 {% for latest in latests %}
循环中),因此您可能希望将其替换为:
<p class="showmore"><a href="{% url 'post_detail' pk=<b>latest</b>.pk %}">Show more</a></p>
如果它是一个 heroku 网络应用程序,运行 heroku 运行 python manage.py createsuperuser 然后添加一个 post,如果它是一个本地项目只是 运行 python manage.py 创建超级用户并添加一个 post
- 我在创建我的博客后遇到了同样的问题,但没有添加任何 post 所以我有这个 NoReverseMatch at / Reverse for 'post_detail' 关键字参数 '{'pk': ''}' 未找到。尝试了 1 种模式:['post/(?P[0-9]+)/$']-
只需转到您的管理员并添加这些内容
我正在使用 Python 和 Django 开发一个简单的博客。在我的主页上,我显示了 3 个最新的 post,然后是所有 post。此时我的博客正在运行。但是我添加了 link "Show more" 或 "Show article" 以在新页面中单独显示 post 但是当我加载页面时出现以下错误:
NoReverseMatch at / Reverse for 'post_detail' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['post/(?P[0-9]+)/$']
PS:我正在学习本教程 in french (this one is in English but it is a bit different 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(请求,pk):
post = get_object_or_404(Post, pk=pk)
return 呈现(请求,'blog/post_detail.html',{'post':post})**,在视图上
url(r'^post/(?P[0-9]+)/$', views.post_detail, name='post_detail'), 在 urls
提前致谢!
在你的模板中你写:
{% for latest in latests %}
<!-- ... -->
<p class="showmore"><a href="{% url 'post_detail' pk=post.pk %}">Show more</a></p>
<!-- ... -->
{% endfor %}
但是第一次出现是before {% for post in posts %}
循环,那时候没有post
变量,但是有一个latest
变量(因为它位于 {% for latest in latests %}
循环中),因此您可能希望将其替换为:
<p class="showmore"><a href="{% url 'post_detail' pk=<b>latest</b>.pk %}">Show more</a></p>
如果它是一个 heroku 网络应用程序,运行 heroku 运行 python manage.py createsuperuser 然后添加一个 post,如果它是一个本地项目只是 运行 python manage.py 创建超级用户并添加一个 post
- 我在创建我的博客后遇到了同样的问题,但没有添加任何 post 所以我有这个 NoReverseMatch at / Reverse for 'post_detail' 关键字参数 '{'pk': ''}' 未找到。尝试了 1 种模式:['post/(?P[0-9]+)/$']-
只需转到您的管理员并添加这些内容