Как написать тег шаблона, который показывает, принадлежит ли пользователь приложению, если это приложение не является частью контекста? - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть приложение, которое имеет FK для пользователя.

Во ВСЕХ шаблонах мне нужен тег шаблона, который проверяет, находится ли зарегистрированный пользователь в этом приложении.

Например ...

На каждой странице я хочу показать блок шаблона, если пользователь находится в наборе customer.approved.

Я играл с {%, если одобрен в customer.approved%} - но я никуда не доберусь.

Любые предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2011

Я думаю, что вам нужен фильтр, который проверяет, есть ли пользователь в вашей модели (FK). Итак, в вашем application_tags.py вы должны сделать что-то вроде:

from django import template
from app.models import MyModel

register = template.Library()

@register.filter
def belongs_to_app(user):
    if user.is_authenticated(): # Could be AnonymousUser
        try:
            # Check if there is a object with FK to logged user
            m = MyModel.objects.get(user=user)
            return True
        except MyModel.DoesNotExist:
            return False
    return False

А в вашем шаблоне:

{% if user|belongs_to_app %}
 ....
{% endif %}
0 голосов
/ 11 ноября 2011

если вы установили пользовательские привилегии, вы можете написать context_processor так, чтобы:

def user_is_authorised(request):
    if request.user.has_perm('myapp.can_view'):
        return {'approved' : True}
    else:
        return {'approved' : False}

и включите его в кортеж CONTEXT_PROCESSORS settings.py как «myapp.context_processors.py»

читать больше по адресу: https://docs.djangoproject.com/en/dev/topics/auth/#handling-object-permissions & https://docs.djangoproject.com/en/dev/ref/templates/api/#django-contrib-auth-context-processors-auth

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

...