首页 > 解决方案 > Django 模板 - 如何在其他块中使用相同的块名称?

问题描述

我正在为登录和注销的用户创建一个动态页面。如果用户通过了身份验证,那么我想显示一些不同的东西而不是我的基本模板。下面是我的代码,你一定会明白的。这就是为什么我要尝试这个。如果有人知道如何在 django 中执行此任务,我们将非常感谢您的帮助。问题是,如果我在模板中的 if 条件内使用相同的块名称两次,则会抛出一个错误,即在模板中两次找到相同的块名称。有没有办法两次使用相同的块名???

{% extends 'gymwebapp/basic.html' %}


    {% if not user.is_authenticated %}
        {% block d-login %}
        <div id="dummy-right">
            <a href="{% url 'register' %}"><button class="btn">Sign Up</button></a>
            <a href="{% url 'login' %}"><button class="btn">Login</button></a>
        </div>
        {% endblock %}
        {% block login %}
        <div class="right">
            <a href="{% url 'register' %}"><button class="btn">Sign Up</button></a>
            <a href="{% url 'login' %}"><button class="btn">Login</button></a>
        </div>
        {% endblock %}
        {% block body %}
        <section class="form-area">
        <div class="form-container">

            <div class="form-heading">
                <h3>Login</h3>
            </div>
            <form action="login" method="POST">
                {% csrf_token %}
                
                <div class="form">
                    
                    
                    
                    <input type="email" placeholder="Email" id="email" name="email" maxlength="30" required></br>
                    <input type="password" placeholder="Password" id="pass" name="pass" maxlength="12" required></br>
                    
                    
                    
                    <button class="btn" id="fbtn" type="submit">Submit</button>
                </div>
            </form>
            </div>
        </section>
        {% endblock %}
        {% endif %}
    
        {% if user.is_authenticated %}
            {% block d-login %}
            <div id="dummy-right">
                <a href="{% url 'register' %}"><button class="btn">{{user.first_name}}</button></a>
                <a href="{% url 'logout' %}"><button class="btn">Logout</button></a>
            </div>
            {% endblock %}
            {% block login %}
            <div class="right">
                <a href="{% url 'register' %}"><button class="btn">{{user.first_name}}</button></a>
                <a href="{% url 'logout' %}"><button class="btn">Logout</button></a>
            </div>
            {% endblock %}
            {% block body %}
            <section class="msg">

                <ul class="messages">
                    
                    <li>{{ msg }}</li>

                </ul>
            </section>
            {% endblock %}
        
        {% endif %}

标签: pythondjango

解决方案


我认为您对某些概念感到困惑。您可以使用块来定义基础模板中的区域(块)。然后,您可以通过使用标签扩展模板来填充定义的块,{% extends %}然后使用您在父模板中定义的块名称。使用相同的块意味着您将在第二次使用它时覆盖该块。如果您想多次使用相同的代码,您可以使用{% include %}标签,或者将应该复制的代码放在基本/父模板中的块标签之外。


推荐阅读