NSProject
17 августа 2023 г. 1:29

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

Django

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

  1. {% if request.user.groups.first.name == 'admin' %}
  2. My code html
  3. {% elif request.user.groups.first.name == 'superuser' %}
  4. My code html
  5. {% endif %}

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

2

Вам это нравится? Поделитесь в социальных сетях!

5
NSProject
  • 18 августа 2023 г. 14:24

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

  1. {% if request.user|accessmoderate:'admin, moderator, SuperUser' %}
  2.  
  1. @register.filter()
  2. def access_moderate(user, list_access):
  3. usergroup = user.groups.first().name
  4. list_access = list_access.split(',')
  5. for item in list_access:
  6. if usergroup == item:
  7. return True
  8.  
  9. return False
  10.  

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

    Evgenii Legotckoi
    • 18 августа 2023 г. 23:09

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

    1. {% if request.user.is_moderator %}
    2.  
    3. {% endif %}
      NSProject
      • 18 августа 2023 г. 23:37

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

        Evgenii Legotckoi
        • 19 августа 2023 г. 0:17
        • Ответ был помечен как решение.

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

          NSProject
          • 19 августа 2023 г. 0:21

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

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь