Snippets 是一段不必成为一个完整网页的内容片段。它可以被用于制作二级内容,例如页头、页脚和边栏,这些内容可以在 Wagtail admin 中编辑。虽然 Snippets 也是 Django 模型,但却不继承自 Page 类,也不属于 Wagtail tree 结构中。然而,它们仍旧可以通过 register_snippet 类修饰器将模型关联到管理面板并作为一个代码片段被编辑。

相比 Pages,Snippets 缺少许多功能,例如在 Wagtail admin 中排序或定义 URL。因此,应根据内容类型的需要谨慎决定是否使用。

在模版中使用

自定义标签

在应用目录中创建 templatetags 目录及 templatetags/my_tags.py 文件并编写以下代码注册标签:

from django import template
from company.models import ProductCategory

register = template.Library()

@register.inclusion_tag('tags/product_category.html', takes_context=True)
def category(context):
    return {
        'category': ProductCategory.objects.all(),
        'request': context['request'],
    }

可以在一个文件中注册多个标签!

标签模版文件

tags/product_category.html 位于应用 templates 目录中,即标签被调用时渲染的模版。

{% for c in category %}
<p>{{ c }}</p>
{% endfor %}

调用标签

使用前需重启应用

标签需加载后方可使用,加载时使用包含注册代码的文件名:

{% load wagtailcore_tags my_tags %}

在模版中调用则使用注册的函数名,注意,不要使用变量标签:

{% category %}

Reference