如何订购Wagtail标签

时间:2018-01-17 10:30:34

标签: tags wagtail

我尝试按照doc(教程我的第一个网站)中的描述为我的帖子创建标签。但我需要按特定顺序显示这些标签。有一些简单的方法或我只需要用Orderable创建自己的类?

1 个答案:

答案 0 :(得分:1)

我认为你已经在文档中提到了这一点 - Tagging Posts并希望以特殊顺序(例如按字母顺序排列)显示带有标签的BlogPage视图。 Orderable是您希望与InlinePanel进行更复杂的管理员互动以及相关模型的排序,您要求页面编辑器自行订购相关项目。

本教程为您的模板blog_page.html提供了此代码:

{% if page.tags.all.count %}
    <div class="tags">
        <h3>Tags</h3>
        {% for tag in page.tags.all %}
            <a href="{% slugurl 'tags' %}?tag={{ tag }}"><button type="button">{{ tag }}</button></a>
        {% endfor %}
    </div>
{% endif %}

要使用标签的自定义排序,您需要设置一种方法将已排序的标签发送到模板上下文。最简单的方法是将一个方法添加到您的BlogPage模型中,我们将调用此get_ordered_tags

    class BlogPage(Page):
        date = models.DateField("Post date")
        # other fields...

        def get_ordered_tags(self):
            """Specific ordered list of tags."""
            # ordered_tags = self.tags.order_by('?')  # order randomly
            ordered_tags = self.tags.order_by('name')  # order by tag name
            return ordered_tags

您可以在Overriding Context上看到文档的更高页面,我们会做类似的事情,将ordered_tags添加到我们的网页上下文中。

然后我们可以轻松地对我们的模板进行一次小改动,只需替换:

{% for tag in page.tags.all %}

使用:

{% for tag in page.get_ordered_tags %}

因此,我们不是按照默认顺序获取标记,而是按照特定顺序获取标记。