【问题标题】:Encountered unknown tag 'load'.?遇到未知标签“加载”。?
【发布时间】:2019-09-12 07:48:03
【问题描述】:

我想添加一些自定义模板标签。但是,{% 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 }}

我希望能解决这个问题。

【问题讨论】:

    标签: python django django-rest-framework jinja2


    【解决方案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.

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 1970-01-01
      • 2016-06-15
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      相关资源
      最近更新 更多