Как вызвать функцию проверки из представлений в шаблоны?
У меня есть функция для проверки, является ли пользователь сотрудником:
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 %}
Это должно помочь.