【问题标题】:NoReverseMatch although get_absolute_url returns the right URLNoReverseMatch 尽管 get_absolute_url 返回正确的 URL
【发布时间】:2016-06-12 11:29:31
【问题描述】:

我正在尝试在我的 Post 模型中使用 get_absolute_url 和 kwargs。

在我的模型中,我得到了 slug 字段和 get_absolute_url 的以下代码

class Post(models.Model):
......
......


    def get_absolute_url(self):
        return reverse('post_detail',kwargs={'pk':self.id, 'slug':self.slug})

urls.py

url(r'^p/(?P<pk>\d+)/(?P<slug>[\w.@+-]+)/$',PostDetailView.as_view(),name='post_detail')

在我的模板中我得到了:

     <ul>
    {% for post in object_list %}
    <li>
      <a href="{% url post.get_absolute_url %}">
        <b>{{ post.title}}</b> 
      </a>
    </li>
    {% endfor %}
  </ul>

当我使用时:python manage.py shell

from website.models import Post
p = Post.objects.first()
p.get_absolute_url()
# returns this
u'/p/1/this-is-a-test/'

它返回正确的 URL,即 /p/1/this-is-test/ 但是当我在像post.get_absolute_url 这样的 模板 中使用它时,它会返回 NoReverseMatch。

我在这里检查了很多问题并复制了答案,但是没有用。

请问我做错了什么?

【问题讨论】:

  • 请发布相关代码 - 您的urls.py 和失败的实际模板代码。

标签: django url


【解决方案1】:

您不应该使用url 模板标签。只需这样做:

<a href="{{ post.get_absolute_url }}"></a>

您当前的代码导致reverse 被调用两次,一次在get_absolute_url 中,一次在get_absolute_url 的输出中。这就是它失败的原因。

【讨论】:

  • 现在遇到这个错误Invalid block tag: 'post.get_absolute_url', expected 'empty' or 'endfor'
  • 你把{%改成{{了吗?
  • 你确定你在做{{ post.get_absolute_url }}而不是{% post.get_absolute_url %}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多