sha*_*har 9 python wsgi jinja2
我们可以在jinja2中使用什么样的条件进行分支?我的意思是我们可以使用python之类的语句.例如,我想检查标题的长度.如果大于60个字符,我想将它限制为60个字符,然后输入"......"现在,我正在做这样的事情,但它不起作用.error.log报告len函数未定义.
template = Template('''
<!DOCTYPE html>
<head>
<title>search results</title>
<link rel="stylesheet" href="static/results.css">
</head>
<body>
{% for item in items %}
{% if len(item[0]) < 60 %}
<p><a href="{{ item[1] }}">{{item[0]}}</a></p>
{% else %}
<p><a href="{{ item[1] }}">{{item[0][40:]}}...</a></p>
{% endif %}
{% endfor %}
</body>
</html>''')
## somewhere later in the code...
template.render(items=links).encode('utf-8')
Run Code Online (Sandbox Code Playgroud)
Jef*_*ner 12
你非常接近,你只需要将它移到你的Python脚本中.所以你可以定义一个这样的谓词:
def short_caption(someitem):
return len(someitem) < 60
Run Code Online (Sandbox Code Playgroud)
然后通过将其添加到'tests'字典中将其注册到环境中:
your_environment.tests["short_caption"] = short_caption
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
{% if item[0] is short_caption %}
{# do something here #}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅自定义测试的jinja文档
(你只需要这样做一次,我认为你在开始渲染模板之前或之后是否这样做很重要,文档不清楚)
如果您还没有使用环境,可以像这样实例化它:
import jinja2
environment = jinja2.Environment() # you can define characteristics here, like telling it to load templates, etc
environment.tests["short_caption"] = short_caption
Run Code Online (Sandbox Code Playgroud)
然后通过get_string()方法加载模板:
template = environment.from_string("""your template text here""")
template.render(items=links).encode('utf-8')
Run Code Online (Sandbox Code Playgroud)
最后,作为旁注,如果您使用文件加载器,它允许您进行文件继承,导入宏等.基本上,您只需保存现在的文件并告诉jinja目录所在的位置.