我试图获取模板中所有变量和块的列表.我不想创建自己的解析器来查找变量.我尝试使用以下代码段.
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('gummi', 'templates'))
template = env.get_template('chat.html')
Run Code Online (Sandbox Code Playgroud)
template.blocks 是键是块的dict,如何获取块内的所有变量?
我想动态显示我的CPU使用情况.我不想重新加载页面以查看新值.我知道如何在Python中获得CPU使用率.现在我用值渲染一个模板.如何使用Flask中的值不断更新页面?
@app.route('/show_cpu')
def show_cpu():
cpu = getCpuLoad()
return render_template('show_cpu.html', cpu=cpu)
Run Code Online (Sandbox Code Playgroud) 我正在使用jinja2模板系统进入django.这真的很快,我很喜欢它.不过,我调试模板时遇到了一些问题:如果我在模板中犯了一些错误(错误的标签,坏的filtername,坏的结尾......),我根本没有关于这个错误的信息.
例如,在django视图中,我写这个:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('main', 'templates'))
def jinja(req):
template = env.get_template('jinja.html')
output=template.render(myvar='hello')
return HttpResponse(output)
Run Code Online (Sandbox Code Playgroud)
我写了一个jinja2模板:jinja.html:
{{myvar|notexistingfilter()}} Jinja !
Run Code Online (Sandbox Code Playgroud)
注意,我故意生成一个不存在的过滤器来生成错误:
我期待像"notexistingfilter()未定义"这样的东西,但我只有一个简单的黑色白色追溯(不是通常的django调试消息):
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 279, in run
self.result = application(self.environ, self.start_response)
File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 651, in __call__
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 241, in __call__
response = self.get_response(request)
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 134, in get_response
return self.handle_uncaught_exception(request, resolver, exc_info)
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 154, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line …Run Code Online (Sandbox Code Playgroud) 在Django模板中,我使用了:
<form action="/user" method="post">{% csrf_token %}
{{ form.as_p|safe }}
<input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
但是当我改为jinja2 template engine:
Encountered unknown tag 'csrf_token'
Run Code Online (Sandbox Code Playgroud)
我的问题:csrf_token protection在jinja2需要?
如果需要,怎么做?
提前致谢!
我是Jinja2的新手,到目前为止,我已经能够完成我想要的大部分工作.但是,我需要使用正则表达式,我似乎无法在文档或谷歌上找到任何东西.
我想在Javascript中创建一个模仿此行为的宏:
function myFunc(str) {
return str.replace(/someregexhere/, '').replace(' ', '_');
}
Run Code Online (Sandbox Code Playgroud)
这将删除字符串中的字符,然后用下划线替换空格.我怎么能用Jinja2做到这一点?
我从设置模块收到以下数据:
"ansible_nodename": "3d734bc2a391",
"ansible_os_family": "RedHat",
"ansible_pkg_mgr": "yum",
"ansible_processor": [
"AuthenticAMD",
"AMD PRO A10-8700B R6, 10 Compute Cores 4C+6G"
],
"ansible_processor_cores": 1,
"ansible_processor_count": 1,
"ansible_processor_threads_per_core": 1,
Run Code Online (Sandbox Code Playgroud)
我想检索第一个值ansible_processor并在Jinja2模板中使用它.
如果我使用{{ ansible_processor }}它,它给了我两个价值观:
"AuthenticAMD",
"AMD PRO A10-8700B R6, 10 Compute Cores 4C+6G"
Run Code Online (Sandbox Code Playgroud)
但我只想要第一个.
Jinja2是否支持模板相对路径,例如%(here)s/other/template.html,包含相对于当前模板在文件系统中的位置的其他模板?
当我们传递模板中不存在的变量时,是否有一种方法让jinja2引发异常?
PS:当模板中存在变量但未传递变量时,这与引发异常不同(或相反).为此,我使用"undefined = StrictUndefined"
是否可以将变量列表附加到ansible的静态列表中?
我可以将整个列表定义为变量:
my_list:
- 1
- 2
- 3
Run Code Online (Sandbox Code Playgroud)
然后在剧本中使用它
something: {{my_list}}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到如何做到这一点(伪代码):
list_to_append:
- 3
- 4
Run Code Online (Sandbox Code Playgroud)
然后在剧本中:
something:
- 1
- 2
- {{append: list_to_append}}
Run Code Online (Sandbox Code Playgroud)
如果这实际上是不可能的,你会对我的用例有什么建议?
我有一个参数中的项目列表,但其中一些是optional并且应该可以使用变量进行修改.
换句话说:我有default values+ optional values可以或不可以通过变量添加.
在optional values事先不知道,我可以添加1,2或其中的100个,所以它们不是静态的.
我基本上有一个默认静态列表++一个可附加的可配置变量列表.
编辑:我发现了这个,但它只适用于with_items,我需要在普通参数中:
with_flattened:
- "{{list1}}"
- "{{list2}}"
Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个Flask应用程序(已经过去一年),我遇到了一个相当......奇怪的错误.我有一些文件总是包含在我的Jinja2模板(navbars)中,它们使用用户的名字和头像.因此,每次我渲染模板时,我都会将其传递给用户.我最近注意到我的prod服务器上有错误:
<img alt="image" class="img-circle" src="{{ user.image }}" style="width: 48px;"/>
File "/usr/local/lib/python2.7/dist-packages/jinja2/environment.py", line 397, in getattr
return getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'user' is undefined
Run Code Online (Sandbox Code Playgroud)
这是我的一个导航栏.呈现此模板的方法使用此方法:
@mod.route('/broken_pus', methods=['POST', 'GET'])
def view_broken_pus():
return render_template("view_broken_pus.html", user=g.user, urls_for_active_clients=DeletedURLs.objects()[0].urls_for_active_clients, other_urls=DeletedURLs.objects()[0].other_urls)
Run Code Online (Sandbox Code Playgroud)
如您所见,我传递了user = g.user.我在我的网站的每个视图上都这样做.它适用于所有地方,除了这个方法,这是非常小的.我有很多其他类似的路线,只有一个渲染模板,所以我没有得到什么问题.
我也得到了另一种方法,更大,以前总是有效:
@mod.route('/users/add', methods=['GET', 'POST'])
@requires_roles("admin", "project-leader")
def add():
"""
Method adding a new user.
"""
# We do not use WTForms there since we need custom checkboxes for the role
# Instead we use basic HTML and treat the checkboxes here
if request.method == …Run Code Online (Sandbox Code Playgroud)