【问题标题】: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 上

提前致谢!

【问题讨论】:

    标签: python django python-3.x post python-3.4


    【解决方案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),因此您可能希望将其替换为:

    &lt;p class="showmore"&gt;&lt;a href="{% url 'post_detail' pk=<b>latest</b>.pk %}"&gt;Show more&lt;/a&gt;&lt;/p&gt;

    【讨论】:

      【解决方案2】:

      如果它是 heroku 网络应用程序,运行 heroku run python manage.py createsuperuser 然后添加一个帖子,如果它是一个本地项目,只需运行 python manage.py createsuperuser 并添加一个帖子

      • 我在创建博客后遇到了同样的问题,但没有添加任何帖子,所以我在“post_detail”/Reverse 找到了这个 NoReverseMatch,关键字参数“{'pk': ''}' 未找到。尝试了 1 种模式:['post/(?P[0-9]+)/$']-

      去你的管理员那里添加这些东西

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-14
        相关资源
        最近更新 更多