寶慕林4294392
2022-01-18 21:26:31
我想添加一些自定義模板標(biāo)簽。但是,{% load userfilters %} => 'load' 標(biāo)簽不起作用。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應(yīng)用程序/模板標(biāo)簽/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 }}我希望能解決這個(gè)問(wèn)題。
1 回答

Helenr
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
Jinja2中沒(méi)有l(wèi)oad標(biāo)簽,過(guò)濾器的工作方式也略有不同(它們只是函數(shù))。
templatetags/*.py 是一個(gè) Django 模板約定,而 Jinja2 根本不使用它們。
您需要在設(shè)置環(huán)境的位置注冊(cè)過(guò)濾器:
def environment(**options):
env = Environment(**options)
env.globals.update({
'static': static,
'url': reverse,
})
env.filters.update({
'a': a,
})
return env
另一種選擇是使用django-jinja模板后端而不是 Django 內(nèi)置的 Jinja2 后端;它更有特色,并且支持templatetags開(kāi)箱即用的樣式加載。
添加回答
舉報(bào)
0/150
提交
取消