其他分享
首页 > 其他分享> > 我如何在Jinja中创建一个标签,该标签包含模板后面的值?

我如何在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