首页 > 解决方案 > Jinja IF 语句不适用于脚本 html 标签

问题描述

我的 Flask 应用程序<head>部分中有两行代码,我想对某些用户隐藏。我正在使用 if 语句来实现它,但它似乎不起作用。语法对我来说似乎很合适,页面加载没有任何错误。我尝试将两个脚本源放入不同的 if 语句中,并多次检查links变量是否具有错误值,但都不是原因。

所以我假设<script>放置在 Jinja 中的元素有一些限制,或者 if 语句在<body>. ({{links}}里面的变量<body>写出'display'值)。怎么做,或者在外面是不可能的<body>

{% extends 'layout.html' %}
    
    <title>{% block title %}Title{% endblock %}</title>

        {% if links == 'display' %}

        {% block firebase1 %}<script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-app.js"></script>{% endblock %}
        {% block firebase2 %}<script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-auth.js"></script>{% endblock %}

        {% endif %}

{% block content %}

{% 块内容 %}

> #from my layout.html
> 
> <!doctype html> <html lang="en">
>     <head>
>         <meta charset="utf-8">
>         <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
>         <link href="/static/favicon.ico" rel="icon" type="image/x-icon"/>
>         <title>{% block title %}Title{% endblock %}</title>
>         {% block firebase1 %}{% endblock %}
>         {% block firebase2 %}{% endblock %}
>     </head>

标签: pythonflaskjinja2

解决方案


主模板中的任何块都没有引用父级 (layout.html) 中的任何块名称。没有地方可以从您的下部模板中插入内容。

如果您有以下内容layout.html

<!doctype html> <html lang="en">
  <head>
    {% block firebase %}{% endblock %}

然后,您可以使用条件来决定将哪些内容放入实际模板中的块中:

{% extends 'layout.html' %}
{% block firebase %}
  {% if links == 'display' %}
    <script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-auth.js"></script>
  {% endif %}
{% endblock %}

推荐阅读