django: оценить результат simple_tag в шаблоне - PullRequest
2 голосов
/ 25 февраля 2012

вот мой код простого тега

@register.simple_tag
def has_right(request,groupname):
    if permission(request,groupname):
        return True
    return False

Это то, что я пытаюсь сделать в шаблоне

 {% if has_right request 'admin' %}
    display admin link
 {%endif%}

, но он жалуется

Exception Value:    
Unused 'request' at end of if expression.

Есть лиДругой способ в шаблоне django для оценки результата тега?

Ответы [ 3 ]

13 голосов
/ 25 февраля 2012

Если вам нужно вычислить значение, вам не нужен тег, вам нужен фильтр.

@register.filter
def has_right(request,groupname):
    ...


{% if request|has_right:groupname %}
0 голосов
/ 21 октября 2015

Вы можете использовать тег назначения.

@register.assignment_tag(takes_context=True)
def has_right(context,groupname):
    request = context['request']
    if permission(request,groupname):
         return True
    return False

А в шаблоне

{% has_right as right %}
{% if right request 'admin' %}
    display admin link
{%endif%}
0 голосов
/ 25 февраля 2012

Причина, по которой он работает не так, как вы хотите, состоит в том, что процессор шаблонов видит тег {% if%} и начинает обрабатывать его как тег {% if%}, а это не то, что вы хотели,Похоже, вы хотели что-то вроде сложного выражения, где оно будет оценивать содержимое if, а затем использовать его для условной обработки.

Я не слишком уверен, что это то, что вы хотите использовать, ноЯ думаю, что более простым решением было бы использование встроенных разрешений в Django.У каждого объекта пользователя уже есть права доступа, и добавление и удаление новых разрешений также довольно просто.https://docs.djangoproject.com/en/dev/topics/auth/#permissions - это ссылка, которую вы хотите проверить.Итак, вы должны установить некоторые разрешения в своих моделях или на лету в представлении, а затем на стороне шаблона все, что вам нужно сделать, это сказать

# Note that perms is a shortcut. Its the same as saying user.has_perm('')
{% if perms.has_that_permission %}

НО, даже круче, чем этоПолагаю, у каждого пользователя уже есть is_staff и is_superuser.Поэтому, если они в настоящее время не используются вашим приложением, я не вижу вреда в использовании is_staff, по крайней мере, для предоставления пользователям разрешений на вашем сайте.Убедитесь, что вы не предоставляете им разрешения суперпользователя, поскольку будучи суперпользователем означает, что любой вызов user.has_perm () вернет TRUE, несмотря ни на что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...