Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t访问我的jinja2过滤器_Python_Pyramid_Jinja2 - Fatal编程技术网

Python Can';t访问我的jinja2过滤器

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设置,正在使用金字塔\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.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_