3

У меня небольшая проблема с моими разрешениями в моем шаблоне Django.Права пользователя для модуля 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 at /project/232/view/

Could not parse the remainder: '(followup.add_followup)' from 'user.has_perm(followup.add_followup)'

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

ответ

1

I have tried this code in my template:

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

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

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

When to use context processor

ли это на ваш взгляд

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 %} 
+0

Причина я попробовав его в шаблоне, было то, что я не хотел показывать значки, которые зарегистрированный пользователь не мог использовать. – TheLifeOfSteve

+1

Вы можете создать логическое значение в функции просмотра и использовать простой {% if%} в шаблоне для отображения или отсутствия отображения. –

+0

Спасибо, оба работали для меня. Большая помощь! – TheLifeOfSteve

11

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

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

EDIT: Django автоматически создает 3 разрешения для каждой модели: «добавить», «изменить» и «удалить». Если не существует модели для добавления ссылки, то вы должны добавить разрешение от соответствующей модели, в классе метамодели ... Точно так же:

somemodels.py

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

В Джанго AUTH странице администратора пользователя, вы можете видеть свое разрешение. В шаблоне слое, разрешение представлено с основным стилем Джанго,

<app_label>.<codename> 

, который в данном случае будет так:

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

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

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

{{perms.somemodels}} 

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

+0

Спасибо, оба работали для меня! – TheLifeOfSteve

+0

он работает! спасибо – JordanChina

2

Джанго документация подробно Ответ # 2: https://docs.djangoproject.com/en/dev/topics/auth/#id9

The currently logged-in user's permissions are stored in the template variable {{ perms }}. This is an instance of django.contrib.auth.context_processors.PermWrapper, which is a template-friendly proxy of permissions.

+0

Спасибо ... это, безусловно, самый полезный ответ! – Greg

+0

Обновленная ссылка: https://docs.djangoproject.com/ru/dev/topics/auth/default/#permissions - работает для Django с 1,5 до 1,7 (которая является самой последней на момент написания). –

2

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

, например:

....... 

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

.......