簡體   English   中英

NoReverseMatch at / Reverse for 'post_detail' 未找到

[英]NoReverseMatch at / Reverse for 'post_detail' not found

我正在用 Python 和 Django 開發一個簡單的博客。 在我的主頁上,我顯示 3 個最新帖子,然后是所有帖子。 在這一點上,我的博客正在運行。 但是我添加了一個鏈接“顯示更多”或“顯示文章”以在新頁面中單獨顯示帖子,但在加載頁面時出現以下錯誤:

NoReverseMatch at / Reverse for 'post_detail' 關鍵字參數為 '{'pk': ''}' 未找到。 嘗試了 1 個模式:['post/(?P[0-9]+)/$']

PS:我正在關注這個法語教程(這個是英文的,但這里的英文有點不同。請注意,我只是開始使用 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 ,在視圖上

**定義 post_detail(請求,pk):

post = get_object_or_404(post, pk=pk)

return render(request, '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 %}

但是,第一次出現是在之前{% 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>

如果它是一個 heroku web 應用程序,運行 heroku run python manage.py createsuperuser 然后添加一個帖子,如果它是一個本地項目,只需運行 python manage.py createsuperuser 並添加一個帖子

  • 我在創建我的博客后遇到了同樣的問題,但沒有添加任何帖子,所以我在 / Reverse for 'post_detail' 中使用了這個NoReverseMatch,關鍵字參數為 '{'pk': ''}' not found。 嘗試了 1 個模式:['post/(?P[0-9]+)/$'] -

只需轉到您的管理員並添加這些內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM