wagteil django 自定义模板标签使用
Published on Aug. 22, 2023, 12:11 p.m.
wagteil片段是不需要呈现完整网页的内容片段。它们可用于制作可在 Wagtail 管理员中编辑的次要内容,例如页眉、页脚和侧边栏。片段是不继承Page类的 Django 模型,因此没有组织到 Wagtail 树中。但是,它们仍然可以通过分配面板并使用register_snippet类装饰器将模型标识为片段来使其可编辑。
- 在应用目录下创建 templatetags目录(与 templates 目录同级,目录名只能是 templatetags)。
HelloWorld/
|-- HelloWorld
| |-- __init__.py
| |-- __init__.pyc
| |-- settings.py
|-- templatetags
| -- node**_tags.py**
|-- templates
...
|-- manage.py
- templatetags 目录下创建任意 py 文件,如:node_tags.py。
- node_tags.py 文件代码如下:
import datetime
import os.path
from django import template
from django.utils.safestring import mark_safe
from node.models import Advert
register = template.Library() #register的名字是固定的,不可改变
#使用绝对路径可用
# @register.inclusion_tag('/home/terry/PycharmProjects/django-mongodb/mysite/node/templates/node/adverts.html', takes_context=True)
#测试相对路径
# @register.inclusion_tag(os.path.join('node/templates/node/adverts.html'), takes_context=True)
@register.inclusion_tag(os.path.join('adverts.html'), takes_context=True)
def adverts(context):
return {
'adverts': Advert.objects.all(),
'request': context['request'],
'qq': context['request'],
}
至于adverts.html模板文件
#adverts.html
TemplateDoesNotExist错误
Django Version: 4.0
Exception Type: TemplateDoesNotExist
Exception Value:adverts.html
核心问题就是模板路径问题,
- 使用绝对路径可用
- 使用**
@register.inclusion_tag**(**'app/adverts.html'**, takes_context=True)
参考链接:
Django inclusion tag takes_context TemplateDoesNotExist error
- (可选)wagteil中不需要修改,如果默认的可用修改 settings.py 文件的 TEMPLATES 选项配置,添加 libraries 配置:
#settings.py 配置文件
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR, "/templates",],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
"libraries":{ # 添加这边三行配置
'node_tags':'templatetags.node_tags' # 添加这边三行配置
} # 添加这边三行配置
},
},
]
- 模板中引用
{% load wagtailcore_tags %}
# 添加
{% load wagtailcore_tags node_tags %}
# 引用内容
{% adverts %}
参考链接
Snippets - Wagtail Documentation 3.0 documentation