遇到未知标签“ load”。 [英] Encountered unknown tag 'load'.?
问题描述
我想添加一些自定义模板标签。但是,{%load userfilters%} =>'load'标签不起作用。
- settings.py
#项目/设置.py
模板= [
{
'BACKEND':'django.template.backends.jinja2.Jinja2',
'DIRS':[
os.path .join(BASE_DIR,'html / jinja2'),
],
'APP_DIRS':是,
'OPTIONS':{
'environment':'accountv1.jinja2。环境,
},
},
]
- jinja2.py
#project / jinja2.py
来自django.templatetags.static导入静态
来自django.urls导入反向
来自jinja2导入环境
def environment(** options):
env = Environment(** options)
env.globals.update({
'static':静态,
'url':反向,
})
return env
- app / templatetags / userfilters.py
从Django导入模板
register = template.Library()
@ register.filter (name ='a')
def a(值):
返回1
< ol start = 4>
#使用django-rest-framework
类IndexView(generics.GenericAPIView):
renderer_classes = [TemplateHTMLRenderer]
template_name ='index.html'
def get(self,request,* args,** kwargs):
return Response({'name':'max'})
-
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.
- 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',
},
},
]
- 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
- app/templatetags/userfilters.py
from django import template
register = template.Library()
@register.filter(name='a')
def a(value):
return 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'})
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屋!