Django NoReverseMatch:尝试在模板中获取slug

时间:2015-08-12 14:44:24

标签: python django

我需要创建一个页面,其中会有包含特定标签的文章。

models.py

class Tag(models.Model):
    title = models.CharField('Title', unique=True, max_length=40, primary_key=True)
    description = models.TextField('Description', max_length=300,
                                   help_text='Short description for this tag')
    tag_slug = models.SlugField()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("tagged_posts", kwargs={"tag_slug": self.tag_slug})

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        self.tag_slug = slugify(self.title)
        super(Tag, self).save()

在关心帖子的课堂上,我有多对多的关系:

assoc_tags = models.ManyToManyField(Tag)

views.py

def tagged_posts(request):
    tag = Tag.objects.select_related().get(tag_slug=tag_slug) #I thought it would work, but it didn't
    posts = tag.post_set.all()
    return render(request, 'blog/tagged_posts.html', {'posts': posts, 'tag': tag, })

在admin.py中,我写道tag_slug是预先填充的字段。

urls.py:

url(r'^tag/(?P<tag_slug>\S+)$', views.tagged_posts, name='tagged_posts'),

模板:

Tagged under
        {% for tag in object.assoc_tags.all %}
            <a href="{% url 'tagged_posts' tag_slug=object.tag_slug %}">{{ tag }}</a>
        {% if not forloop.last %}, {% endif %}
        {% endfor %}

结果,我有这个错误:

  

NoReverseMatch :反向'tagged_posts',参数'()'和关键字参数'{'tag_slug':''}'找不到。尝试了1种模式:['blog / tag /(?P \ S +)$'] **

你能告诉我,我做错了什么?

2 个答案:

答案 0 :(得分:1)

它不是很清楚,因为我认为你没有发布正确的观点,但看起来你在帖子中提到了tag_slug,而不是标签。

<a href="{% url 'tagged_posts' tag_slug=tag.tag_slug %}">

答案 1 :(得分:0)

这个tutoral - http://arunrocks.com/recreating-the-building-a-blog-in-django-screencast/帮助我解决了我的问题。以下链接 - https://github.com/arocks/qblog/compare/tagview显示添加的代码功能。正如丹尼尔罗斯曼回答的那样,我的模板中有错误的引用:而不是标签,我提到了一个“对象”。