遇到未知标签“ load”。

时间:2019-04-23 07:02:29

标签: python django django-rest-framework jinja2

我想添加一些自定义模板标签。但是,{%load userfilters%} =>'load'标签不起作用。

  1. settings.py
# 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',
        },
    },
]
  1. jinja2.py
# 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
  1. app / templatetags / userfilters.py
from django import template

register = template.Library()


@register.filter(name='a')
def a(value):
    return 1
  1. views.py
# 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'})
  1. demo.html

    • 不起作用
{% load userfilters %}
<!-- custom filter -->
{{ name|a }}
  • 是工作
<!-- default filter -->
{{ name|title }}

我希望解决这个问题。

1 个答案:

答案 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