NoReverseMatch at / Reverse找不到'post_detail'

问题描述 投票:1回答:1

我正在用Python和Django开发一个简单的博客。在我的主页上,我显示了3个最新帖子,然后显示了所有帖子。此时我的博客正在运作。但我添加了一个链接“显示更多”或“显示文章”以在新页面中单独显示帖子,但是当我加载页面时出现以下错误:

NoReverseMatch at / Reverse为'post_detail',找不到关键字参数'{'pk':''}'。尝试了1种模式:['post /(?P [0-9] +)/ $']

PS:我正在关注这个教程in french(这个是英文的,但它有点不同in english here。请注意我是开始Python和Django的juste :)

所以这是我的代码:

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(帖子,pk = pk)

在视图上返回渲染(请求,'blog / post_detail.html',{'post':post})**

url(r'^ post /(?P [0-9] +)/ $',views.post_detail,name ='post_detail'),在网址上

提前致谢 !

python django python-3.x post python-3.4
1个回答
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变量(因为它位于{% for latest in latests %}循环中),所以你可能想要用以下代码替换它:

<p class="showmore"><a href="{% url 'post_detail' pk=latest.pk %}">Show more</a></p>
© www.soinside.com 2019 - 2024. All rights reserved.