遇到未知标签“ load”。 [英] Encountered unknown tag 'load'.?

查看:260
本文介绍了遇到未知标签“ load”。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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


  1. settings.py



 #项目/设置.py 
模板= [
{
'BACKEND':'django.template.backends.jinja2.Jinja2',
'DIRS':[
os.path .join(BASE_DIR,'html / jinja2'),
],
'APP_DIRS':是,
'OPTIONS':{
'environment':'accountv1.jinja2。环境,
},
},
]




  1. jinja2.py



 #project / jinja2.py 
来自django.templatetags.static导入静态
来自django.urls导入反向

来自jinja2导入环境


def environment(** options):
env = Environment(** options)
env.globals.update({
'static':静态,
'url':反向,
})
return env




  1. app / templatetags / userfilters.py



 从Django导入模板

register = template.Library()


@ register.filter (name ='a')
def a(值):
返回1



< ol start = 4>

  • views.py



  •  #使用django-rest-framework 
    类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%} 
    <!-自定义过滤器->
    {{name | a}}




    • 正在工作



     <!-默认过滤器-> 
    {{name | title}}

    我希望解决此问题。

    解决方案

    Jinja2中没有 load 标签,并且过滤器的工作方式也有所不同(它们只是函数)。



    templatetags / *。py 是Django模板约定,而Jinja2却没有



    您需要在设置环境的地方注册过滤器:



    < pre $ = lang-py prettyprint-override> def环境(**选项):
    env = Environment(**选项)
    env.globals.update({
    '静态':静态,
    'URL':反向,
    })
    env.filters.update({
    'a':a,
    })
    return env

    另一种选择是使用 django-jinja 模板后端,而不是Django的内置Jinja2 backen d;它具有更多功能,并且支持 templatetags 开箱即用加载样式


    I want to add some custom-template-tags.But, {% load userfilters %} => 'load' tag is not working.

    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

      • is not working

    {% load userfilters %}
    <!-- custom filter -->
    {{ name|a }}
    

    • is work

    <!-- default filter -->
    {{ name|title }}
    

    I hope to solve this problem.

    解决方案

    There is no load tag in Jinja2, and filters work a little differently too (they're just functions).

    templatetags/*.py is a Django Templates convention, and Jinja2 doesn't use them at all.

    You'll want to register your filters where you set up your environment:

    def environment(**options):
        env = Environment(**options)
        env.globals.update({
            'static': static,
            'url': reverse,
        })
        env.filters.update({
            'a': a,
        })
        return env
    

    Another option is to use the django-jinja template backend instead of Django's built-in Jinja2 backend; it's a little more featureful and supports templatetags style loading out of the box.

    这篇关于遇到未知标签“ load”。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆