Права пользователя для модуля Django - PullRequest
3 голосов
/ 03 февраля 2011

У меня небольшая проблема с моими разрешениями в шаблоне Django.

Я пытаюсь, основываясь на разрешениях, показать значок в строке меню для моего проекта.Я хочу, чтобы, если у пользователя есть разрешения на добавление нового продолжения проекта, он мог видеть значок, если у него нет этого разрешения, то не отображать ссылку.

Мой синтаксис разрешений follow.add_followup, полученный при печати user.get_all_permissions().

Я попробовал этот код в своем шаблоне:

...
{% if user.has_perm('followup.add_followup') %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
...

Но когда я отображаю шаблон,Мне сообщают об этой ошибке:

TemplateSyntaxError в / project / 232 / view /

Не удалось проанализировать остаток: '(followup.add_followup)' from 'user.has_perm (followup.add_followup) '

Есть мысли?Это доставляло мне головную боль!:)

Ответы [ 4 ]

11 голосов
/ 03 февраля 2011

Поскольку вы используете систему разрешений Django, лучше использовать следующий синтаксис шаблона g ...

{%if perms.followup.add_followup%}your URL here{%endif%}

РЕДАКТИРОВАТЬ: Django автоматически создает 3 разрешения для каждой модели: «добавить», «изменить»и «удалить».Если не существует модели для добавления ссылки, необходимо добавить разрешение от связанной модели в класс модели Meta ... Аналогично:

somemodels.py

class SomeModel(Model):
    ...
    class Meta:
    permissions = (('add_followup','Can see add urls'),(...))

ВСтраница авторизации пользователя Django, вы можете видеть свое разрешение.На уровне шаблона разрешение представлено в базовом стиле Django,

<app_label>.<codename>

, который в этом случае будет выглядеть следующим образом:

{%if perms.somemodels.add_followup%}your URL here{%endif%}

Если модель не связана сработа, которую вы хотите сделать, добавить разрешение для модели ...

В своем шаблоне вы можете написать

{{perms.somemodels}}

, чтобы запечатать доступные разрешения для этого пользователя, где somemodel - это название приложения, к которому вы добавляете свое разрешение к одной из его моделей.

2 голосов
/ 08 июня 2012

Это мое очень простое решение, добавьте в свой шаблон:

например:

.......

{% if 'user.can_drink' in user.get_all_permissions %}
   {{ user }} can drink.
   .......
{% else %}
   {{ user }} can´t drink.
    ........
{% endif %}

.......
2 голосов
/ 29 февраля 2012

Документация Django, детализирующая ответ № 2: https://docs.djangoproject.com/en/dev/topics/auth/#id9

Разрешения текущего вошедшего в систему пользователя хранятся в переменной шаблона {{perms}}. Это экземпляр django.contrib.auth.context_processors.PermWrapper, который является дружественным для шаблона прокси-сервером разрешений.

1 голос
/ 03 февраля 2011

Я пробовал этот код в моем шаблоне:

Этот вид комплексного принятия решений идет в функциях представления.

Или он входит в контекст, которыйзатем представляется шаблону.

https://stackoverflow.com/search?q=%5Bdjango%5D+context

Когда использовать контекстный процессор

Сделайте это на ваш взгляд

def my_view( request ):
    followup= user.has_perm('followup.add_followup')
    # etc.
    return render_to_response( template, {'followup':followup,... )

Тогда ваш шаблон просто

{% if followup %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...