首页 > 解决方案 > 在 html 中使用 jinja2 来根据环境变量控制要加载的 javascript

问题描述

我有一个 main.html 文件,它根据模式(开发或生产)加载一个 javascript 文件

cat main.html
...
{% block javascript %}
  <!-- for development -->
  <script type="module" src="main1.js"></script>

  <!-- for production -->
  <script type="module" src="main2.js"></script>
{% endblock %}

目前我来回手动:

我想通过 jinja2 自动控制这一点if,方法是根据环境变量控制要加载的 js 文件。以下代码有效,但我想使用环境变量(而不是 python 变量current_user.role)进行控制

{% block javascript %}
  {% if (current_user.role == "admin") %}
    <!-- for development -->
    <script type="module" src="main1.js"></script>
  {% else %}
    <!-- for production -->
    <script type="module" src="main2.js"></script>
  {% endif %}
{% endblock %}

这可能吗?

谢谢

标签: jinja2

解决方案


我发现这可以通过以下方式完成:

cat main.py
...
from flask import render_template, session
...
@bp.route('/')
def main_page():
...
    session['mode'] = 'development'

    return render_template('main.html', mode=session['development'])
cat templates/main.html
...
{% block body1 %}
  {% if mode == "development" %}
    <!-- for development -->
    <script type="module" src="main1.js"></script>
  {% else %}
    <!-- for production -->
    <script type="module" src="main2.js"></script>
  {% endif %}
{% endblock %}

推荐阅读