#python #django
#python #django
Вопрос:
Я новичок в разработке django.
Я хочу создать тег шаблона на главной странице моего блога и ссылку на страницу статьи моего блога.
Вот мой тег шаблона :
{% url 'post_detail' pk=post.pk article_id=photo.article_id %}
но вызвать ошибку :
NoReverseMatch at /
Reverse for 'post_detail' with keyword arguments '{'pk': '', 'article_id': ''}' not found. 2 pattern(s) tried: ['post/(?P<pk>[^/] )/$', 'post/(?P<pk>[^/] )/(?P<article_id>[^/] )/$']
Я пытаюсь (pk и article_id) = 1,2,3 … и так далее.Он может функционировать.
Вот мой код:
домашняя страница html:
<div class="story">
{% for article in article %}
<div>
<div>
<h3><b>{{ article.title }}</b></h3>
<h5>{{ article.created_at }}</h5>
</div>
<div>
<p>{{ article.content }}</p>
<div>
<div>
<p><button type="button" onclick="location.href='{% url 'post_detail' pk=post.pk article_id=photo.article_id %}'"><b>READ MORE »</b></button></p>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
view.py:
def home(request):
article = Article.objects.all()
photo = Picture.objects.all()
return render(request, 'home.html', {'article':article,'photo':photo} )
def post_detail(request,pk,article_id):
post = Article.objects.get(pk=pk)
photo = Picture.objects.get(article_id=article_id)
return render(request,"post.html",{"post":post , "photo":photo})
url.py:
from blog.views import home,post_detail
path('', home)
path('post/<pk>/<article_id>/', post_detail, name='post_detail')
Комментарии:
1. откуда берется ваш
post
объект в вашем шаблоне?
Ответ №1:
Поскольку @Walucas прокомментировал ваш вопрос, вы ссылаетесь на объект ‘post’ в вашем шаблоне, который не был передан из вашего представления в качестве контекста.
{% url 'post_detail' pk=post.pk article_id=photo.article_id %}
^
возможно, вы имеете в виду:
{% url 'post_detail' pk=article.pk article_id=photo.article_id %}
^
легко пропустить.
Ответ №2:
Измените свой путь:
path('post/<int:pk>/<int:article_id>/', views.post_detail, name='post_detail')
Ответ №3:
NoReverseMatch at /
Reverse for 'post_detail' with keyword arguments '{'pk': '', 'article_id': ''}' not found. 2 pattern(s) tried: ['post/(?P<pk>[^/] )/$', 'post/(?P<pk>[^/] )/(?P<article_id>[^/] )/$']
Когда вы прочитаете сообщение об ошибке, вы сможете понять свою ошибку.
['post/(?P<pk>[^/] )/$', 'post/(?P<pk>[^/] )/(?P<article_id>[^/] )/$']
Значение приведенного выше вывода, вы должны использовать ключевое слово ‘post’ вместо ‘article’.
{% url 'post_detail' pk=post.pk something=post.something %}
Я думаю, вам следует проверить другие ваши файлы python.
Ваш views.py файл не содержал 'views. post_detail'.
Если вы внесете изменения, подобные приведенным выше кодам, я думаю, вы сможете решить свою проблему.