Обратный для ‘post_detail’ с аргументами ключевого слова ‘{‘pk’: «, ‘article_id’: «}’ не найден

#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'.

Если вы внесете изменения, подобные приведенным выше кодам, я думаю, вы сможете решить свою проблему.