【问题标题】:How to order Wagtail tags如何订购鹡鸰标签
【发布时间】:2018-01-17 10:30:34
【问题描述】:

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

【问题讨论】:

  • 只需将您的评论移至“[使用标签]作为呈现文本子标题的简单方法,我需要为所有帖子保持这些子标题相同”的问题。抱歉,我不完全理解您要做什么 - 可能会更新问题,更详细地说明您希望编辑界面是什么样的。听起来您需要做一个相关模型并使用 InlinePanel 来实现子标题概念,但不是 100% 确定。

标签: tags wagtail


【解决方案1】:

我假设您已在文档中达到这一点 - Tagging Posts 并希望以特殊顺序(例如按字母顺序)显示带有标签的 BlogPage 视图。 Orderable 是如果您想与 InlinePanels 进行更复杂的管理交互以及对相关模型进行排序,您需要页面编辑器自己对相关项目进行排序。

本教程为您的模板提供此代码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 %}

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

【讨论】:

  • 感谢您的帮助。我可以按名称订购(例如直接在模板中),但在我的情况下,我需要为每个帖子指定顺序。我不使用标签作为链接组,就像如何呈现文本副标题一样简单,我需要让所有帖子的这些副标题保持相同。所以,我需要为每个帖子指定要使用的标签和顺序。也许创建自己的类来保存这些信息会更容易,但是在 Wagtail 管理员中这样的标签所具有的显示/编辑这些信息的方法并不是很好。
猜你喜欢
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
相关资源
最近更新 更多