到目前为止,我发现当Mako模板编码不正确时,无法生成可用的回溯.
有没有办法调试模板除了迭代每行代码?
在我的Flask应用程序中,我有一个显示帖子的视图
@post_blueprint.route('/post/<int:year>/<int:month>/<title>')
def get_post(year,month,title):
# My code
Run Code Online (Sandbox Code Playgroud)
要显示最后10个条目,我有以下视图:
@post_blueprint.route('/posts/')
def get_all_posts():
# My code
return render_template('p.html',posts=posts)
Run Code Online (Sandbox Code Playgroud)
现在,当我显示最后10个帖子时,我想将帖子的标题转换为超链接.目前我必须在我的jinja模板中执行以下操作来实现此目的:
<a href="/post/{{year}}/{{month}}/{{title}}">{{title}}</a>
Run Code Online (Sandbox Code Playgroud)
有没有办法避免硬编码网址?
就像url_for用于创建Flask网址的函数一样:
url_for('view_name',**arguments)
Run Code Online (Sandbox Code Playgroud)
我试过寻找一个,但我,我找不到它.
我有一个方法返回我的基本模板中需要的数据(全局页脚的内容).
如何(1)将变量传递给基本模板(其他模板扩展)或(2)将变量全局传递给所有模板而不在调用中明确添加它render_template?
我在Jinja2中进行代码生成,我经常想要一起遍历两个列表(即变量名称和类型),是否有一种简单的方法可以执行此操作,还是只需要传递一个预压缩列表?我无法在文档或谷歌搜索中找到这样的功能.
我需要检查变量texts是否已定义index.html.
如果定义了变量而不是空,那么我应该渲染循环.否则,我想显示错误消息{{error}}.
基本上这在PHP中
if (isset($texts) && !empty($texts)) {
for () { ... }
}
else {
print $error;
}
Run Code Online (Sandbox Code Playgroud)
的index.html
{% for text in texts %}
<div>{{error}}</div>
<div class="post">
<div class="post-title">{{text.subject}}</div>
<pre class="post-content">{{text.content}}</pre>
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我怎么说在jinja2?
我使用flask,当我调用此url时出现此错误:/login
这是我的登录方法:
@app.route('/login')
def login():
if authenticateForPanel():
return redirect(url_for("panel"))
else:
getParam = request.args.getlist('redirect_uri')
if getParam:
ref =getParam[0]
else:
ref="/panel"
return render_template( themesDir + g.blogOptions['active_theme']+'/login.html', blogOptions = g.blogOptions, ref=ref )
Run Code Online (Sandbox Code Playgroud)
追溯:
Traceback (most recent call last):
File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/flask/app.py", line 1701, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/flask/app.py", line 1689, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/flask/app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/flask/app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/flask/app.py", line 1358, in full_dispatch_request
rv = …Run Code Online (Sandbox Code Playgroud) 基于extra vars参数I需要写入变量值ansible playbook
ansible-playbook playbook.yml -e "param1=value1 param2=value2 param3=value3"
Run Code Online (Sandbox Code Playgroud)
如果只通过了param1
myvariable: 'param1'
Run Code Online (Sandbox Code Playgroud)
如果只有param1,则param2通过
myvariable: 'param1,param2'
Run Code Online (Sandbox Code Playgroud)
如果传递了param1,param2,param3,那么变量值将是
myvariable: 'param1,param2,param3'
Run Code Online (Sandbox Code Playgroud)
当我尝试通过模板动态创建变量时,我的playbook总是采用先前的变量值.但在 dest=roles/myrole/vars/main.yml其写作正确的价值.
我在这里尝试一下
- hosts: local
user: roop
gather_facts: yes
connection: local
tasks:
- template: src=roles/myrole/templates/myvar.j2 dest=roles/myrole/vars/main.yml
- debug: var=myvariable
roles:
- { role: myrole }
Run Code Online (Sandbox Code Playgroud)
所以里面myrole目录我创建template和vars
- roles
- myrole
- vars/main.yml
- templates/myvar.j2
Run Code Online (Sandbox Code Playgroud)
模板/ myvar.j2
{% if param1 is defined and param2 is defined and param3 …Run Code Online (Sandbox Code Playgroud) 我的蓝图瓶应用程序周围的许多路线需要将"侧边栏数据"发送给jinja.
我正在寻找最有效的方法来做到这一点.它们必须比将'generate_sidebar_data()'函数导入每个蓝图更好,反复说:
var1, var2, var3 = generate_sidebar_data()
Run Code Online (Sandbox Code Playgroud)
然后使用'render_template'发送它们:
return render_template('template.html',
var1=var1,
var2=var2,
var3=var3
)
Run Code Online (Sandbox Code Playgroud)
我想要的是一个装饰器,我可以使用与上述相同的路径(运行函数并将变量发送给jinja),但我不知道这是否可行.如何从装饰器函数内部向jinja发送变量?
@blueprint.route('/')
@include_sidebar_data
def frontpage():
return render_template('template.html')
Run Code Online (Sandbox Code Playgroud) 我有一个嵌套列表.我需要迭代一个列表并将其保持在for循环中,如下所示.
{% for alpha in list %}
<div id="{{ loop.index }}">
<div class='sidebar-one'>
{% for beta in list[0][2:] %} #I want to iterate through list[0][2:] till list[n][2:]
<p> {{ beta[0][0] }} </p>
{% endfor %}
</div>
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我试过范围但没有运气.
{% for n in range(1,n) %}
{% for line in check[{{n}}][2:] %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
它扔错了:
TemplateSyntaxError: expected token ':', got '}'
Run Code Online (Sandbox Code Playgroud)