Zoe*_*Zoe 2 python django jinja2 django-rest-framework
我想添加一些自定义模板标签。但是,{% 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',
},
},
]
Run Code Online (Sandbox Code Playgroud)
# 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
Run Code Online (Sandbox Code Playgroud)
from django import template
register = template.Library()
@register.filter(name='a')
def a(value):
return 1
Run Code Online (Sandbox Code Playgroud)
# 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'})
Run Code Online (Sandbox Code Playgroud)
演示.html
{% load userfilters %}
<!-- custom filter -->
{{ name|a }}
Run Code Online (Sandbox Code Playgroud)
<!-- default filter -->
{{ name|title }}
Run Code Online (Sandbox Code Playgroud)
我希望能够解决这个问题。
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
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用django-jinja模板后端而不是 Django 内置的 Jinja2 后端;它的功能更多一些,并且支持templatetags开箱即用的样式加载。
| 归档时间: |
|
| 查看次数: |
4937 次 |
| 最近记录: |