【问题标题】:Reverse for 'post_detail' with keyword arguments '{'pk': '', 'article_id': ''}' not found使用关键字参数'{'pk':'','article_id':''}'反向'post_detail'
【发布时间】:2020-10-26 09:39:37
【问题描述】:

我是 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 and 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')

【问题讨论】:

  • 您的post 对象在您的模板上来自哪里?

标签: python django


【解决方案1】:

正如@Walucas 对您的问题所评论的那样,您在模板中引用了一个尚未从您的视图作为上下文传递的“帖子”对象。

{% 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'.

      如果您像上面的代码一样进行更改,我认为您可以解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-11
        • 2018-09-08
        • 1970-01-01
        • 2021-07-20
        • 2019-08-06
        • 2018-12-28
        • 2018-11-07
        • 2017-08-12
        相关资源
        最近更新 更多