我尝试按照doc(教程我的第一个网站)中的描述为我的帖子创建标签。但我需要按特定顺序显示这些标签。有一些简单的方法或我只需要用Orderable创建自己的类?
答案 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 %}
因此,我们不是按照默认顺序获取标记,而是按照特定顺序获取标记。