Python Can';t访问我的jinja2过滤器
我已经看了文件,但找不到答案。这可能是我错过的最基本的东西。我有带金字塔的jinja2设置,正在使用金字塔\u jinja2,并在我的.ini文件中设置了我的过滤器:Python Can';t访问我的jinja2过滤器,python,pyramid,jinja2,Python,Pyramid,Jinja2,我已经看了文件,但找不到答案。这可能是我错过的最基本的东西。我有带金字塔的jinja2设置,正在使用金字塔\u jinja2,并在我的.ini文件中设置了我的过滤器: jinja2.filters = model_url = pyramid_jinja2.filters:model_url_filter route_url = pyramid_jinja2.filters:route_url_filter static_url = pyramid_jinja2.filte
jinja2.filters =
model_url = pyramid_jinja2.filters:model_url_filter
route_url = pyramid_jinja2.filters:route_url_filter
static_url = pyramid_jinja2.filters:static_url_filter
my_filter = myapp.view.my_filter
(my_filter只是将每个值乘以100)
这很好:
@view_config(renderer="json",route_name="tester")
def tester(request):
myList = [1,2,3,4]
return render_to_response("templates/test.jinja2",{'myList':myList},request=request)
test.jinja2:
{% for l in myList %}
{{ l | my_filter }}
{% endfor %}
{{ html | safe }}
然而,这并不是:
@view_config(renderer="json",route_name="tester")
def tester(request):
myList = [1,2,3,4]
tmplate = Template(u'''\
{% for l in myList %}
{{ l | my_filter }}
{% endfor %}
''')
html = tmplate.render(myList = myList)
return render_to_response("templates/test.jinja2",{'html':html},request=request)
test.jinja2:
{% for l in myList %}
{{ l | my_filter }}
{% endfor %}
{{ html | safe }}
我的错误消息:
jinja2.exceptions.TemplateAssertionError
TemplateAssertionError: no filter named 'my_filter'
因为,您的模板未与环境链接,您通常在哪里定义过滤器。模板类初始化创建自环境,与主环境没有关系 如果您希望从字符串动态创建模板,并保留过滤器,则需要以下内容:
from jinja2 import Environment
env = Environment() # main environment, basically one per program.
env.filters['my_filter'] = lambda i: i * 100
template = env.from_string('{% for i in myList %}{{ i|my_filter }}_{% endfor %}')
print(template.render(myList=range(10)))
# 0_100_200_300_400_500_600_700_800_900_
因为,您的模板未与环境链接,您通常在哪里定义过滤器。模板类初始化创建自环境,与主环境没有关系 如果您希望从字符串动态创建模板,并保留过滤器,则需要以下内容:
from jinja2 import Environment
env = Environment() # main environment, basically one per program.
env.filters['my_filter'] = lambda i: i * 100
template = env.from_string('{% for i in myList %}{{ i|my_filter }}_{% endfor %}')
print(template.render(myList=range(10)))
# 0_100_200_300_400_500_600_700_800_900_