Python 在Jinja2模板中隐藏元素?有没有隐藏按钮的方法?

Python 在Jinja2模板中隐藏元素?有没有隐藏按钮的方法?,python,html,flask,jinja2,Python,Html,Flask,Jinja2,我正在使用Python和Flask开发我的web应用程序。我有一个导航栏和一些按钮,我想隐藏一个按钮,当我不在索引页。可能吗?我希望“选择品牌”按钮仅在index.html页面上可见 {% block navbar %} <nav class="navbar navbar-expand-lg navbar-default fixed-top "> <div class="container"> <div class="navbar-hea

我正在使用Python和Flask开发我的web应用程序。我有一个导航栏和一些按钮,我想隐藏一个按钮,当我不在索引页。可能吗?我希望“选择品牌”按钮仅在index.html页面上可见

{% block navbar %}

<nav class="navbar navbar-expand-lg navbar-default fixed-top ">
    <div class="container">

        <div class="navbar-header">
            <button button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" rel="home" href="{{ url_for('main.index') }}" title="Mobile phones and accessories">
                <img style="max-width:40px; margin-top: -9px;"
                     src="http://www.logospng.com/images/38/devfest-2016-38885.png" >
            </a>
        </div>

        <div id="navbar" class="collapse navbar-collapse navbar-responsive-collapse">
            <ul class="nav navbar-nav">
                <li class="active"><a href="{{ url_for('main.index') }}">Home</a></li>
                {% if current_user.is_authenticated and current_user.admin %}
                <li><a href="{{ url_for('phones.new_phone') }}">Add phone</a></li>
                <li><a href="{{ url_for('phones.brand') }}">Add brand</a></li>
                {% endif %}

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Select brand <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        {% for brand in brands %}
                        <li class="list-group-item">
                            <a href="{{ url_for('main.index', bra=brand) }}">{{ brand }}</a>
                         {% endfor %}


                    </ul>
                </li>
            </ul>
                        <ul class="nav navbar-nav navbar-right">
                {% if current_user.is_authenticated %}
                    <li class="dropdown">
                        <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                            <span class="glyphicon glyphicon-user"> </span> {{ current_user.username }}
                            <span class="caret"></span>
                        </a>
                        <ul class="dropdown-menu">
                                <li><a href="{{ url_for('auth.logout') }}" >Logout</a></li>
                        </ul>
                    </li>
                {% else %}
                    <li><a class="nav-link" href="{{ url_for('auth.login') }}" >Login</a></li>
                    <li><a class="nav-link" href="{{ url_for('auth.register') }}" >Register</a></li>
                {% endif %}
            </ul>
                <form class="navbar-form navbar-right" method='POST' action="{{ url_for('phones.search') }}">
                <div class="form-group">
                    <input class="search-query form-control" placeholder="Search..." aria-label="Search" type="text" name="search">
                </div>
            </form>
        </div>

    </div>
</nav>
{% endblock %}


{%block-navbar%}
切换导航
  • {%如果当前_user.is_身份验证且当前_user.admin%}
  • {%endif%}
    • {品牌中品牌的百分比%}
    • {%endfor%}
    {%如果当前用户是经过身份验证的%}
  • {%else%}
  • {%endif%}
{%endblock%}
我认为这会奏效

在子页面上设置以下内容:

{% set active_page = "index" %}
然后在基本模板中:

{% if active_page == "index" %}
... button html here
{% endif %}

索引
路由中创建一个新变量,并将该变量传递到所述路由的
渲染模板
方法中。此变量的存在将决定是否应呈现
中的
或链接。由于
将在所有其他版面中共享,因此其
HTML
代码应放在您的基本版面中,或所有其他视图继承的版面中

大致如下:

索引路径:

@app.route("/")
def index():
    # isIndex is the variable we will use to determine 
    # whether or not to render your navigation link or button
    return render_template('index.html', isIndex=True)
基本布局文件:

  <div class="navbar-nav">
      {% if isIndex %}
          <a class="nav-item nav-link" href="">linkOnlyForIndexPage</a>
       {% else %}
          <a class="nav-item nav-link" href="">link1</a>
          <a class="nav-item nav-link" href="">link2</a>
       {% endif %}
  </div>

{%if isIndex%}
{%else%}
{%endif%}
这正是您正在使用
{%if current_user.is_authenticated%}
为您的导航链接执行的操作。之所以这样做,是因为索引路由是唯一一个设置此变量的路由,在jinja2模板中,因此所有呈现相应视图的其他路由在此条件检查中将默认为false:
{%if isIndex%}


希望这有帮助

您所要做的就是将按钮放在一个if/else块中,类似于您在这里所做的“{%if current_user.is_authenticated%}”,而是基于页面标题。我不完全熟悉这种模板语法,但基本上是{%if filename='index.html%}{%end if%}然后,您需要在python代码中的某个地方设置var文件名。@KyleJoeckel当我运行应用程序时,我得到了一个错误
jinja2.exceptions.TemplateSyntaxError:应该是标记“语句块的结尾”,获取“=”
我猜它不接受=我仍然获取
jinja2.exceptions.TemplateSyntaxError:预期标记为“语句块结束”,获取“=”
错误抱歉,我错过了if语句中的“=”。请参阅上面更新的帖子。不确定我做错了什么,但是{%else%}之前的链接没有显示在索引页上,但是else之后的链接显示正确。实际上它是有效的!!我在另一个文件中有索引函数,我所需要做的就是传递变量isIndex,它就可以工作了。非常感谢你的帮助。很高兴它起了作用!