我想添加一些自定义模板标签。但是,{% load userfilters %} => 'load' 标签不起作用。settings.py# project/settings.pyTEMPLATES = [ { 'BACKEND': 'django.template.backends.jinja2.Jinja2', 'DIRS': [ os.path.join(BASE_DIR, 'html/jinja2'), ], 'APP_DIRS': True, 'OPTIONS': { 'environment': 'accountv1.jinja2.environment', }, },]jinja2.py# project/jinja2.pyfrom django.templatetags.static import staticfrom django.urls import reversefrom jinja2 import Environmentdef environment(**options): env = Environment(**options) env.globals.update({ 'static': static, 'url': reverse, }) return env应用程序/模板标签/userfilters.pyfrom django import templateregister = template.Library()@register.filter(name='a')def a(value): return 1views.py# use django-rest-frameworkclass IndexView(generics.GenericAPIView): renderer_classes = [TemplateHTMLRenderer] template_name = 'index.html' def get(self, request, *args, **kwargs): return Response({'name': 'max'})演示.html不管用{% load userfilters %}<!-- custom filter -->{{ name|a }}是工作<!-- default filter -->{{ name|title }}我希望能解决这个问题。
1 回答

Helenr
TA贡献1780条经验 获得超4个赞
Jinja2中没有load标签,过滤器的工作方式也略有不同(它们只是函数)。
templatetags/*.py 是一个 Django 模板约定,而 Jinja2 根本不使用它们。
您需要在设置环境的位置注册过滤器:
def environment(**options):
env = Environment(**options)
env.globals.update({
'static': static,
'url': reverse,
})
env.filters.update({
'a': a,
})
return env
另一种选择是使用django-jinja模板后端而不是 Django 内置的 Jinja2 后端;它更有特色,并且支持templatetags开箱即用的样式加载。
添加回答
举报
0/150
提交
取消