Django отображение шаблона в зависимости от роли пользователя
Разрабатываю проект на Django, есть необходимость изменять вид главной страницы в зависимости от роли вошедшего пользователя. Есть две роли: администраторы и обычные пользователи. Хотел бы сделать так, чтобы после авторизации на сайте пользователю выводился html шаблон в зависимости от его роли. Пока что реализация выглядит так:
@login_required
def index(request):
if request.user.groups.filter(name='admin').exists():
template = 'index_admin.html'
elif request.user.groups.filter(name='users').exists():
template = 'index_user.html'
return render(request, template)
Однако уверен, что есть более правильная и надежная реализация данного функционала. Возможно ли как-то доработать эту проверку?
я вижу еще два варианта:
Передавать значение функции request.user.groups.filter(name='admin').exists() в шаблон в качестве аргумента:
is_admin = request.user.groups.filter(name='admin').exists() context = {'is_admin': is_admin} return render(request, 'index_user.html', context)
в шаблоне можно уже более гибко управлять содержанием:
{% if is_admin %}
что-то выводим для админа
{% else %}
вывод для пользователя
{% endif %}
Кастомизировать модель пользователя джанги и создать метод проверки на админа:
class CustomUser(AbstractUser): some_extra_data = models.CharField(max_length=100, blank=True) def is_admin(self): if self.groups.name == 'Admin': return True else: return False
Затем в шаблоне можно выполнить проверку на админа:
{% if request.user.is_admin %}
что-то выводим для админа
{% else %}
вывод для пользователя
{% endif %}