"None"当值为时,我如何说服Jinja2不打印None?
我在字典中有很多条目,我想在一个循环中输出所有内容,而不是针对不同的关键字有特殊情况.如果我的值为None(NoneType不是字符串),则将字符串"None"插入到模板渲染结果中.
尝试使用{{ value or '' }}效果很好地抑制它,
因为它也会替换数值零.
在将字典传递给Jinja2进行渲染之前,是否需要过滤字典?
我使用Flask/Jinja2模板使用| float过滤器显示数字.
这是我的代码
{% set proc_err = nb_err|length / sum * 100 %}
({{proc_err|float}}%)
Run Code Online (Sandbox Code Playgroud)
输出有点尴尬:
17/189 (8.99470899471%)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法,使点后的地方限制为数字,例如2.
期望的输出:
17/189 (8.99%)
Run Code Online (Sandbox Code Playgroud) 如何在Jinja2参数列表声明中添加注释?
我尝试的所有内容都会出错: jinja2.exceptions.TemplateSyntaxError:unexpected char u'#'
{{ Switch('var',
[('1', 'foo'), # comment 1
('2', 'bar'), ## comment 2
('3', 'rum'), {# comment 3 #}
]) }}
{% macro Switch(var, caselist) %}
{% for case, action in caselist%}
CMP {{var}} {{case}}
JNE {{LABEL}}
{{action}}
JMP {{LABELF}}
{{LABEL}}: NOP
{%- endfor %}
{{LABELF}}: NOP
{%- endmacro -%}
Run Code Online (Sandbox Code Playgroud) 我没有找到jinja2和Mako的良好比较.你会用什么来完成什么任务?
我个人很满意mako(在一个pylons网络应用程序环境中),但我很想知道jinja2是否有一些很好的功能/改进mako不? - 或者可能是缺点? -
有时我需要测试一些我在ansible角色中使用的jinja2模板.这样做最简单的方法是什么?
例如,我有一个模板(test.j2):
{% if users is defined and users %}
{% for user in users %}{{ user }}
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
和vars(在group_vars/all中):
---
users:
- Mike
- Smith
- Klara
- Alex
Run Code Online (Sandbox Code Playgroud) 我对python缺乏经验,所以当我在pocoo.org上阅读jinja API文档时,我误入歧途.它写道:
配置Jinja2为应用程序加载模板的最简单方法大致如下:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Run Code Online (Sandbox Code Playgroud)
这将创建一个具有默认设置的模板环境和一个在yourapplication python包中的templates文件夹中查找模板的加载器.
事实证明,这并不是那么简单,因为你必须在其中创建/安装包含模板的python包,这会带来许多不必要的复杂性,特别是如果你无意分发你的代码.您可以在此处和此处参考有关此主题的SO问题,但答案含糊不清且不满意.
显然,天真的新手想要做的只是直接从文件系统加载模板,而不是作为包中的资源. 这是怎么做到的?
我在Jinja模板中有一个if语句,出于可读性的原因,我想用多语言编写它.考虑这个案子
{% if (foo == 'foo' or bar == 'bar') and (fooo == 'fooo' or baar == 'baar') etc.. %}
Run Code Online (Sandbox Code Playgroud) 我有一个python字典:
settings = {
"foo" : "baz",
"hello" : "world"
}
Run Code Online (Sandbox Code Playgroud)
settings然后,此变量可在Jinja2模板中使用.
我想检查模板中dict中是否myProperty存在密钥settings,如果是,请执行以下操作:
{% if settings.hasKey(myProperty) %}
takeSomeAction();
{% endif %}
Run Code Online (Sandbox Code Playgroud)
hasKey我可以使用的相当于什么?
我只想循环遍历现有列表并从中创建逗号分隔的字符串.
像这样的东西:my_string = 'stuff, stuff, stuff, stuff'
我已经知道了loop.last,我只需要知道如何使我的代码中的第三行在WORK下面.
{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff + ', '%}
{% endfor%}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我正在使用的Jinja模板中的字符串转换为大写字母.
在模板文档中,我读到:
upper(s)
Convert a value to uppercase.
Run Code Online (Sandbox Code Playgroud)
所以我写了这段代码:
{% if student.departament == "Academy" %}
Academy
{% elif upper(student.department) != "MATHS DEPARTMENT" %}
Maths department
{% endif %}
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
UndefinedError: 'upper' is undefined
Run Code Online (Sandbox Code Playgroud)
那么,如何在Jinja2中将字符串转换为大写?