Могу ли я сделать представление видимым для некоторых определенных пользователей, а для других нет на Django
Я хочу сделать некоторые страницы недоступными для некоторых пользователей, что я имею в виду, например, я хочу, чтобы пользователь1 мог видеть viewa и не мог видеть viewb, я пытался сделать это, я разработал 2 функции разрешений и функцию роли пользователя:
Вот код 2 функций разрешений в views.py:
def is_normaluser_login_required(function):
def wrapper(request, *args, **kw):
user=request.user
if not user.roleuser.is_normaluser:
return render(request, 'unauthorized.html') # or raise 403
else:
return function(request, *args, **kw)
return wrapper
def is_privilgeuser_login_required(function):
def wrapper(request, *args, **kw):
user=request.user
if not user.roleuser.is_privilgeuser:
return render(request, 'unauthorized.html') # or raise 403
else:
return function(request, *args, **kw)
return wrapper
у меня есть шаблон go to home, где есть боковая панель, содержащая 2 списка (каждый список вызывает представление), я хочу, чтобы только пользователи, которым разрешено видеть эту форму-список на панели навигации;
Вот код в template.html, который содержит 2 формы, которые я хочу ограничить доступ для обеих:
<nav class="mt-2">
<ul class="nav" >
{% if perms.app1_name.is_normaluser_login_required %}
<li class="nav-item">
<a href="{%url 'form_module1'%}" class="nav-link">
</a>
</li>
{% endif %}
{% if perms.app1_name.is_privilgeuser_login_required %}
<!---->
<li class="nav-item">
<a href="{%url 'form_module2'%}" class="nav-link">
</a>
</li>
{% endif %}
</ul>
</nav>
---> после этого два списка исчезают из панели навигации (как будто не имеет значения, есть ли у пользователя его роль или нет), иначе я указал на странице администратора пользователей и их роли.
это как те :
{% if perms.app_name.is_privilgeuser_login_required %}
#code...
{% endif %}
-> не работает
Я не знаю, можно ли это применить, спасибо заранее.
Вы не можете использовать декораторы в шаблоне так, как вы можете создать пользовательский фильтр или тег шаблона.
Вместо создания пользовательского фильтра/тега вы можете сделать это по запросу.
Измените ваш код следующим образом
<nav class="mt-2">
<ul class="nav" >
{% if user.roleuser.is_normaluser %}
<li class="nav-item">
<a href="{%url 'form_module1'%}" class="nav-link">
</a>
</li>
{% endif %}
{% if user.roleuser.is_privilgeuser %}
<!---->
<li class="nav-item">
<a href="{%url 'form_module2'%}" class="nav-link">
</a>
</li>
{% endif %}
</ul>
</nav>