Jinja2 / Flask - 在一页中多次重复使用基本模板

Jinja2 / Flask - Re-using a base template many times in one page

我的网站有共同的基本元素,我要在一个页面上多次重复使用这些元素。

在一个站点中,将有多个下拉菜单,每个下拉菜单都有一组不同的下拉菜单。

目前,我使用render_template的方式如下:

from flask import render_template

@app.route('/')
def index():
   
    return render_template('LandingPage.html',
                           FileName='Hi.png', relatedlist=['NewUser',"OtherNewUser"])

我正在为我的 select 表格使用 bulma,它看起来像:

<div class="select">

    <select name="{{FileName|safe}}">

        {% for val in relatedlist%}
        <option href="#" class="dropdown-item">
            {{val}}
        </option>

        {% endfor %}
    </select>
</div>

现在,我的主页看起来像:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 {% include "LandingPage.html" %}

</body>
</html>

如果我想在 LandingPage.html 中多次重复使用这个 select 列表,我该怎么做,因为 Filenamerelatedlist 是一个-从我的 python 代码推送一对一映射?

谢谢!

我认为你应该为 bulma 创建一个带有 macros 的文件。
对于您的下拉菜单,它看起来像这样。

{# macros/bulma.html -#}
{% macro select(name, values) -%}
{% set cls = kwargs.pop('class_') or kwargs.pop('class') -%}
  <div class="select{{(' ' + cls) if cls else ''}}"{{kwargs|xmlattr}}>
    <select name="{{name}}">
      {% for v in values -%}
      <option value="{{v}}">{{v}}</option>
      {% endfor -%}
    </select>
  </div>
{%- endmacro %}

然后您可以将此文件导入模板并为各种下拉菜单重复使用该宏。

{% import 'macros/bulma.html' as bulma -%}
{% for i in range(10) -%}
{{ bulma.select(filename, related_list, class_='is-primary') }}
{% endfor -%}