Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.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 如何使用命名空间类在Jinja2中使用全局变量?_Python_Html_Flask_Namespaces_Jinja2 - Fatal编程技术网

Python 如何使用命名空间类在Jinja2中使用全局变量?

Python 如何使用命名空间类在Jinja2中使用全局变量?,python,html,flask,namespaces,jinja2,Python,Html,Flask,Namespaces,Jinja2,所以,我一直在尝试在Jinja2模板中创建一个全局变量,它将在所有循环和块中可用。我正在尝试使用Jinja2的名称空间类。但是,我遇到了以下问题 HTML- {% set ns = namespace(items=0) %} {% for line in range(3) %} {% set ns.items = ns.items + line %} {% endfor %} {{ ns.items }} 蟒蛇- @app.route('/', methods=['GET', 'PO

所以,我一直在尝试在Jinja2模板中创建一个全局变量,它将在所有循环和块中可用。我正在尝试使用Jinja2的名称空间类。但是,我遇到了以下问题

HTML-

{% set ns = namespace(items=0) %}
{% for line in range(3) %}
    {% set ns.items = ns.items + line %}
{% endfor %}

{{ ns.items }}
蟒蛇-

@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
@login_required
def index():
    return render_template('index_test.html')
错误-

jinja2.exceptions.TemplateSyntaxError
jinja2.exceptions.TemplateSyntaxError: expected token 'end of statement block', got '.'

Traceback (most recent call last)
File "d:\python\lib\site-packages\flask\app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "d:\python\lib\site-packages\flask\app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "d:\python\lib\site-packages\flask\app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "d:\python\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "d:\python\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "d:\python\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "d:\python\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "d:\python\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "d:\python\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "d:\python\lib\site-packages\flask\app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "d:\python\lib\site-packages\flask_login\utils.py", line 261, in decorated_view
return func(*args, **kwargs)
File "C:\Users\Boudhayan Dev\Desktop\Segregator\app\routes.py", line 19, in index
return render_template('index_test.html')
File "d:\python\lib\site-packages\flask\templating.py", line 133, in render_template
return _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
File "d:\python\lib\site-packages\jinja2\environment.py", line 869, in get_or_select_template
return self.get_template(template_name_or_list, parent, globals)
File "d:\python\lib\site-packages\jinja2\environment.py", line 830, in get_template
return self._load_template(name, self.make_globals(globals))
File "d:\python\lib\site-packages\jinja2\environment.py", line 804, in _load_template
template = self.loader.load(self, name, globals)
File "d:\python\lib\site-packages\jinja2\loaders.py", line 125, in load
code = environment.compile(source, name, filename)
File "d:\python\lib\site-packages\jinja2\environment.py", line 591, in compile
self.handle_exception(exc_info, source_hint=source_hint)
File "d:\python\lib\site-packages\jinja2\environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "d:\python\lib\site-packages\jinja2\_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "C:\Users\Boudhayan Dev\Desktop\Segregator\app\templates\index_test.html", line 3, in template
{% set ns.items = ns.items + line %}
File "d:\python\lib\site-packages\jinja2\environment.py", line 497, in _parse
return Parser(self, source, name, encode_filename(filename)).parse()
File "d:\python\lib\site-packages\jinja2\parser.py", line 896, in parse
result = nodes.Template(self.subparse(), lineno=1)
File "d:\python\lib\site-packages\jinja2\parser.py", line 878, in subparse
rv = self.parse_statement()
File "d:\python\lib\site-packages\jinja2\parser.py", line 130, in parse_statement
return getattr(self, 'parse_' + self.stream.current.value)()
File "d:\python\lib\site-packages\jinja2\parser.py", line 198, in parse_for
body = self.parse_statements(('name:endfor', 'name:else'))
File "d:\python\lib\site-packages\jinja2\parser.py", line 165, in parse_statements
result = self.subparse(end_tokens)
File "d:\python\lib\site-packages\jinja2\parser.py", line 878, in subparse
rv = self.parse_statement()
File "d:\python\lib\site-packages\jinja2\parser.py", line 130, in parse_statement
return getattr(self, 'parse_' + self.stream.current.value)()
File "d:\python\lib\site-packages\jinja2\parser.py", line 184, in parse_set
drop_needle=True)
File "d:\python\lib\site-packages\jinja2\parser.py", line 164, in parse_statements
self.stream.expect('block_end')
File "d:\python\lib\site-packages\jinja2\lexer.py", line 386, in expect
self.name, self.filename)
jinja2.exceptions.TemplateSyntaxError: expected token 'end of statement block', got '.'

上述代码与Jinja2文档一致,但尽管如此,还是导致了错误。请帮助我找到解决方案。

名称空间功能是在Jinja2版本2.10中引入的,请参阅:

版本2.10中的新增功能:添加了对命名空间对象的支持

您的错误表明您的版本较旧;对于第2.10条,本规范不作更改:

>>> import jinja2
>>> jinja2.__version__
'2.10'
>>> from jinja2 import Template
>>> template = Template('''\
... {% set ns = namespace(items=0) %}
... {% for line in range(3) %}
...     {% set ns.items = ns.items + line %}
... {% endfor %}
...
... {{ ns.items }}
... ''')
>>> template.render().strip()
'\n\n    \n\n    \n\n    \n\n\n3'

确保升级到2.10;这是目前的最新版本,于2017年11月8日发布。

名称空间功能是在Jinja2 2.10版中引入的,请参见:

版本2.10中的新增功能:添加了对命名空间对象的支持

您的错误表明您的版本较旧;对于第2.10条,本规范不作更改:

>>> import jinja2
>>> jinja2.__version__
'2.10'
>>> from jinja2 import Template
>>> template = Template('''\
... {% set ns = namespace(items=0) %}
... {% for line in range(3) %}
...     {% set ns.items = ns.items + line %}
... {% endfor %}
...
... {{ ns.items }}
... ''')
>>> template.render().strip()
'\n\n    \n\n    \n\n    \n\n\n3'

确保升级到2.10;这是目前最新的版本,于2017年11月8日发布。

您安装了什么版本的Jinja2?Jinja2.\uuuu版本\uuuu=2.9.6您安装了什么版本的Jinja2?Jinja2.\uuu版本\uuu=2.9.6