我在Ansible中注册了名为"network"的变量:
{
"addresses": {
"private_ext": [
{
"type": "fixed",
"addr": "172.16.2.100"
}
],
"private_man": [
{
"type": "fixed",
"addr": "172.16.1.100"
},
{
"type": "floating",
"addr": "10.90.80.10"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可能获得类型="浮动"的IP地址("addr")做这样的事情?
- debug: var={{ network.addresses.private_man | filter type="fixed" | get "addr" }}
Run Code Online (Sandbox Code Playgroud)
我知道语法错了,但你明白了.
我的一个瓶子项目使用Jinja2.PyCharm不会自动识别它并显示错误等行.有没有办法使Jinja2工作?
使用Django模板引擎我可以在使用命名参数设置自定义上下文时包含另一个部分模板,如下所示:
{% include "list.html" with articles=articles_list1 only %}
{% include "list.html" with articles=articles_list2 only %}
Run Code Online (Sandbox Code Playgroud)
您可能正在假设,articles_list1并且articles_list2是两个不同的列表,但我可以重用list.html将使用该articles变量的相同模板.
我正在尝试使用Jinja2实现相同的功能,但我看不出推荐的方式,因为with关键字不受支持.
我想在循环中更改在循环外声明的变量的值.但总是在改变,它将初始值保持在循环之外.
{% set foo = False %}
{% for item in items %}
{% set foo = True %}
{% if foo %} Ok(1)! {% endif %}
{% endfor %}
{% if foo %} Ok(2)! {% endif %}
Run Code Online (Sandbox Code Playgroud)
这呈现:
Ok(1)!
Run Code Online (Sandbox Code Playgroud)
所以到目前为止唯一(坏)解决方案是:
{% set foo = [] %}
{% for item in items %}
{% if foo.append(True) %} {% endif %}
{% if foo %} Ok(1)! {% endif %}
{% endfor %}
{% if foo %} Ok(2)! {% endif %}
Run Code Online (Sandbox Code Playgroud)
这呈现: …
在jinja中,变量loop.index保存当前运行循环的迭代次数.
当我有嵌套循环时,如何在内循环中获得外循环的当前迭代?
假设我有一个Python变量:
list_of_items = ['1','2','3','4','5']
Run Code Online (Sandbox Code Playgroud)
我通过渲染HTML将它传递给Jinja,我还在JavaScript中使用了一个函数somefunction(variable).我试图通过每个项目list_of_items.我试过这样的事情:
{% for item in list_of_items %}
<span onclick="somefunction({{item}})">{{item}}</span><br>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
是否可以将列表从Python传递给JavaScript,还是应该在循环中逐个传递列表中的每个项目?我怎样才能做到这一点?
我有以下Jinja模板:
{% set mybool = False %}
{% for thing in things %}
<div class='indent1'>
<ul>
{% if current_user %}
{% if current_user.username == thing['created_by']['username'] %}
{% set mybool = True %}
<li>mybool: {{ mybool }}</li> <!-- prints True -->
<li><a href='#'>Edit</a></li>
{% endif %}
{% endif %}
<li>Flag</li>
</ul>
</div>
<hr />
{% endfor %}
{% if not mybool %}
<!-- always prints this -->
<p>mybool is false!</p>
{% else %}
<p>mybool is true!</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
如果在for …
在模板中,如何获取我当前所在的页面?我宁愿不传递变量page,特别是当我知道有些request.xxx可以提供我的信息时.
<li {% if page=="home" %}class="active"{% endif %}>
<a href="/">Home</a>
</li>
<li {% if page=="about" %}class="active"{% endif %}>
<a href="/about">About</a>
</li>
Run Code Online (Sandbox Code Playgroud) 据我了解Flask中的g变量,它应该为我提供一个存储数据的全局位置,例如在登录后保存当前用户.它是否正确?
我希望我的导航在整个站点登录后显示我的用户名.
我的观点包含
from Flask import g #among other things
Run Code Online (Sandbox Code Playgroud)
在登录期间,我分配
user = User.query.filter_by(username = form.username.data).first()
if validate(user):
session['logged_in'] = True
g.user = user
Run Code Online (Sandbox Code Playgroud)
我似乎无法访问g.user.相反,当我的base.html模板具有以下内容时......
<ul class="nav">
{% if session['logged_in'] %}
<li class="inactive">logged in as {{ g.user.username }}</li>
{% endif %}
</ul>
Run Code Online (Sandbox Code Playgroud)
我收到错误:
jinja2.exceptions.UndefinedError
UndefinedError: 'flask.ctx._RequestGlobals object' has no attribute 'user'
Run Code Online (Sandbox Code Playgroud)
登录否则工作正常.我错过了什么?
如何为Jinja2宏处理额外的args和kwargs?文档不是很清楚.
例如,这显然是错误的:
{% macro example_1(one, two, **kwargs) %}
do macro stuff
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
结果
jinja2.exceptions.TemplateSyntaxError
TemplateSyntaxError: expected token 'name', got '**'
Run Code Online (Sandbox Code Playgroud)
该文件说:
kwargs
像varargs但是关键字参数.所有未使用的关键字参数都存储在此特殊变量中.
不幸的是,任何额外关键字参数的组合都是错误,
{% macro example_2(one, two) %}
do macro stuff
{% endmacro %}
{{ example_2(one, two, test='test') }}
TypeError: macro 'example_2' takes no keyword keyword argument 'test'
Run Code Online (Sandbox Code Playgroud)
我没有例子,也没有在Jinja2源代码atm中讨论.此时我不清楚文档.任何想法都赞赏.