Django: Показать кнопку в шаблоне для определенного уровня группы - PullRequest
0 голосов
/ 10 июля 2019

У меня есть 3 группы: просмотрщик, редактор и создатель. Я хочу показать правильное количество кнопок в соответствии с разрешениями.

зритель: можно увидеть список и детали

редактор: права просмотра + можно редактировать

создатель: права редактора + можно создавать и удалять

Я пытался запустить это для шаблона:

{% load groupfilter %}
{% if request.user|group:"creator" %}
<p>creator permissions</p>
{% endif %}{% if request.user|group:"editor" || request.user|group:"creator" %}
<p>editor permissions</p>
{% endif %}{% if request.user|group:"editor" || request.user|group:"creator" || request.user|group:"viewer"%}
<p>viewer permissions</p>
{% endif %}

но я получаю эту ошибку: Не удалось разобрать остаток: '||' из '||'.

groupfilter.py:

from django import template
register = template.Library()

@register.filter(name='group')
def group(u, group_names):
return u.groups.filter(name=group_names)

Что я сделал не так? Есть ли более простой способ сделать это? Спасибо

1 Ответ

0 голосов
/ 10 июля 2019

Ваша логика верна в шаблоне, но использование неверно.Вы пытаетесь проверить условие OR и в Python / Django вам следует использовать слово or.Также ваш фильтр должен проверить, существует ли группа, потому что вы возвращаете набор запросов в шаблон, который никогда не будет делать то, что вы хотите.Вы можете проверить мой пример ниже.

{% load groupfilter %}

{% if request.user|group:"creator" %}
    <p>creator permissions</p>
{% endif %}
{% if request.user|group:"editor" or request.user|group:"creator" %}
    <p>editor permissions</p>
{% endif %}
{% if request.user|group:"editor" or request.user|group:"creator" or request.user|group:"viewer"%}
    <p>viewer permissions</p>
{% endif %}

То, что вы также можете сделать, это реализовать свой фильтр таким образом, чтобы он получал список имен групп и при этом вам не нужно было много "или"

from django import template
register = template.Library()

@register.filter(name='group')
def group(u, group_names):
    group_names = group_names.split(',')
    return u.groups.filter(name__in=group_names).exists()
{% load groupfilter %}

{% if request.user|group:"creator" %}
    <p>creator permissions</p>
{% endif %}
{% if request.user|group:"editor,creator" %}
    <p>editor permissions</p>
{% endif %}
{% if request.user|group:"editor,creator,viewer" %}
    <p>viewer permissions</p>
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...