我如何在Jinja中创建一个标签,该标签包含模板后面的值?
作者:互联网
我正在使用Jinja2,并且试图创建可以协同工作的几个标签,例如,如果我有一个看起来像这样的模板:
{{ my_summary() }}
... arbitrary HTML ...
{{ my_values('Tom', 'Dick', 'Harry') }}
... arbitrary HTML ...
{{ my_values('Fred', 'Barney') }}
我将得到以下结果:
This page includes information about <b>Tom</b>, <b>Dick</b>, <b>Harry</b>, <b>Fred</b>, and <b>Barney</b>.
... arbitrary HTML ...
<h1>Tom, Dick, and Harry</h1>
... arbitrary HTML ...
<h1>Fred and Barney</h1>
换句话说,页面开头的my_summary()包括页面稍后提供的信息.它应该足够聪明,以考虑到include和import语句中出现的表达式.
最好的方法是什么?
解决方法:
免责声明:我不认识Jinja.
我的猜测是您不能(轻松)完成此任务.
我建议以下替代方法:
>将Tom,Dick等值作为变量从外部传递到模板.
>让您的自定义标签将值用作参数.
>我不知道您的情况将是什么“外部”.如果在Web应用程序框架中使用模板,则“外部”可能是控制器方法.
>例如:
模板:
{{ my_summary(list1 + list2) }} ... arbitrary HTML ... {{ my_values(list1) }} ... arbitrary HTML ... {{ my_values(list2) }}
控制器:
def a_controller_method(request): return render_template('templatefilename', { 'list1': ['Dick', 'Tom', 'Harry'], 'list2': ['Fred', 'Barney']})
>如果从外部传递值不可行,建议您在模板顶部定义它们,如下所示:
{% set list1 = ['Dick', ...] %} {% set list2 = ['Fred', ...] %} {{ my_summary(list1 + list2) }} ... arbitrary HTML ... {{ my_values(list1) }} ... arbitrary HTML ... {{ my_values(list2) }}
标签:templating,jinja2,python 来源: https://codeday.me/bug/20191108/2004426.html