我想添加一些自定义模板标签。但是,{%load userfilters%} =>'load'标签不起作用。
# project/settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [
os.path.join(BASE_DIR, 'html/jinja2'),
],
'APP_DIRS': True,
'OPTIONS': {
'environment': 'accountv1.jinja2.environment',
},
},
]
# project/jinja2.py
from django.templatetags.static import static
from django.urls import reverse
from jinja2 import Environment
def environment(**options):
env = Environment(**options)
env.globals.update({
'static': static,
'url': reverse,
})
return env
from django import template
register = template.Library()
@register.filter(name='a')
def a(value):
return 1
# use django-rest-framework
class IndexView(generics.GenericAPIView):
renderer_classes = [TemplateHTMLRenderer]
template_name = 'index.html'
def get(self, request, *args, **kwargs):
return Response({'name': 'max'})
demo.html
{% load userfilters %}
<!-- custom filter -->
{{ name|a }}
<!-- default filter -->
{{ name|title }}
我希望解决这个问题。
答案 0 :(得分:1)
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后端;更具特色,supports templatetags
style loading out of the box。