Как вызвать функцию проверки из представлений в шаблоны?

У меня есть функция для проверки, является ли пользователь сотрудником:

class VerificateUser():
    def allowed_user(request):
        if request.user.is_staff:
            return True

В моем шаблоне я собираюсь показывать этот раздел только для штатных пользователей, но это не работает.

{% url if not allowed_user %}
<h1>
    Welcome to the show
</h1>
If do something like it, works:

```html
{% if not request.user.is_staff %}
<h1>
    Welcome to the show
</h1>

Но мне нужно использовать функцию представления, чтобы очистить мой код, потому что я, вероятно, собираюсь добавить больше условий.

Вы можете сделать это многими способами, но проще всего это сделать следующим способом-

{% if request.user.is_authenticated %}
    <p>Welcome,{{request.user.first_name}} </p>          
{% endif %}

request объект по умолчанию доступен во всех контекстах ваших шаблонов Django.

Поскольку вы используете class-based view, я бы предложил обновить словарь context, который вы могли бы использовать в шаблоне html, чтобы определить, разрешен ли user или нет. Например, внутри views.py.

class VerificateUser():
    # Update the context
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        # Call the allowed_user() and return whatever value, passing that value it to the context variable
        context['allowed_user'] = self.allowed_user()

    return context

    # Checking if the user is allowed here
    def allowed_user():
        if self.request.user.is_staff:
            return True

        return False

Теперь внутри файла html вы можете ссылаться на этот файл allowed_user из контекстной переменной.

{% if allowed_user %}
    <h1>Hi, you are allowed to see here...</h1>
{% endif %}

Это должно помочь.

Вернуться на верх