将 Django 模板与用户身份验证结合使用

Using Django Templates with User Authentication

我有一个网站,我正在使用用户身份验证来限制访问。 我正在使用 django-allauth 来处理社交媒体身份验证,但只想限制对 staff 帐户的访问(在 django 管理面板中设置)。

我想将模板用作 header(bootstrap、导航栏等),然后加载主要内容,或要求用户登录或请求验证的消息由管理员。

我的 header 模板文件:inventory/header.html

<body>
    {% load bootstrap3 %}

    {% if user.is_authenticated %}
        {% if user.is_staff%}
            {% block main %}{% endblock %}
            {% block scripts %}{% endblock %}
        {% else %}
            <h1>Please ask an administrator to activate your account</h1>
        {% endif %}
    {% else %}
        <h1>Please login to see this page</h1>
    {% endif %}
</body>

视图调用的另一个模板:inventory/home.html

{% include "inventory/header.html" %}
{% block main %}
    This is the home page.
{% endblock %}

观点:

def home(request):
    return render(request,'inventory/home.html')

每当我调用视图时,无论用户是登录还是工作人员,main 块总是显示。其他错误信息显示正确。

我试图避免将 is_authenticated/is_staff 插入到我的所有模板中。我也考虑过使用 login_required 视图装饰器,但这并没有解决我的 is_staff 问题。

原来我应该用

{% extends "inventory/header.html" %}

而不是

{% include "inventory/header.html" %}

哎呀!