Я занимаюсь разработкой простого блога с Python и Django.На моей домашней странице я показываю 3 последних сообщения, а затем все сообщения.На данный момент мой блог работает.Но я добавил ссылку «Показать больше» или «Показать статью», чтобы отобразить только сообщение на новой странице, но я получаю следующую ошибку при загрузке страницы:
NoReverseMatch at / Reverse for 'post_detail 'с аргументами ключевого слова' {'pk': ''} 'не найден.Попробован 1 шаблон (ов): ['post / (? P [0-9] +) / $']
PS: я изучаю этот урок на французском (это на английском, но здесь немного по-английски . И, пожалуйста, обратите внимание, что я только начинаю Python и Django:)
Так вот мой код:
post_list.html (template)
{% 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})
Urls
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 import render, get_object_or_404 , по просмотрам
** def post_detail (request, pk):
post = get_object_or_404 (Post, pk = pk)
return render (запрос, 'blog / post_detail.html', {'post': post}) **, по просмотрам
url (r '^ post / (? P [0-9] +) / $', views.post_detail, name = 'post_detail'), по URL
Заранее спасибо!