NSProject
17 серпня 2023 р. 01:29

Передача списка в custom templatetags Django

Django

Доброго времени суток. Я пытаюсь реализовать доступ к определённым функциям сайта по названию группы.
И что б не проверять всё примерно таки образом

{% if request.user.groups.first.name == 'admin' %}
My code html
{% elif request.user.groups.first.name == 'superuser' %}
My code html
{% endif %}

Хотел сделать templatetags и передавать в него два аргумента request.user и список групп у которых есть доступ. Но выходит что я не могу передать список. Как это реализовать есть идеи?

2

Вам це подобається? Поділіться в соціальних мережах!

5
NSProject
  • 18 серпня 2023 р. 14:24

Похоже я вновь задал вопрос себе и сам хочу ответить. Сформировать массив в html можнр или передать его из view. Но в моём случае это лишнее. По этому пришёл к идее что можно просо передавать строку и разбирать её как нужно.
В итоге вышло что то вроде этого.

{% if request.user|accessmoderate:'admin, moderator, SuperUser' %}

@register.filter()
def access_moderate(user, list_access):
    usergroup = user.groups.first().name
    list_access = list_access.split(',') 
    for item in list_access:
       if usergroup == item:
           return True

    return False

Это в общем то база что мне и была нужна. Из минусов отмечу тот факт чтоб изменить группы доступаа нужно лопатить шаблоны и менять вручную. А так всё

    Evgenii Legotckoi
    • 18 серпня 2023 р. 23:09

    Можно ещё добавить метод в модель пользователя в котором проверять наличие пользователя в той или иной группе

    {% if request.user.is_moderator %}
    
    {% endif %}
    
      NSProject
      • 18 серпня 2023 р. 23:37

      Да в принципе можно и так но это дополнительные поля опять же. А я подумал чисто от группы зависит условие. И в принципе на данный момент оно меня устраивает, а уже дальше будет видно. Единственное изменение это конфигурация в settings и работает.
      Главной целью было чтоб не передавать из view чтоб самому не запутаться. А так пока что работает. В дальнейшем может напишу каку систему для универсальности. Может быть )))

        Evgenii Legotckoi
        • 19 серпня 2023 р. 00:17
        • Відповідь була позначена як рішення.

        Вообще я имел ввиду добавить метод, а не поле

          NSProject
          • 19 серпня 2023 р. 00:21

          Ну да кстати как вариант. Надо подумать над этим. Спасибо за подсказку.

            Коментарі

            Only authorized users can post comments.
            Please, Log in or Sign up