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

#django #django-models #django-views

#django #django-модели #django-просмотры

Вопрос:

У меня есть приложение, у которого есть FK для USER.

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

Например…

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

Я играл с {% if approved в customer.approved %} — но у меня ничего не получается.

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

Комментарии:

1. Когда вы говорите «приложение», вы имеете в виду модель, верно? Приложение — это набор моделей, представлений, URL-адресов .. а модель — это класс

2. Хорошо, итак, мой пост ниже должен быть полезным

Ответ №1:

Я думаю, что вам нужен фильтр, который проверяет, есть ли пользователь в вашей модели (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 %}
  

Ответ №2:

если вы задаете пользовательские настройки, вы можете написать 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 amp;
https://docs.djangoproject.com/en/dev/ref/templates/api/#django-contrib-auth-context-processors-auth

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

Комментарии:

1. return {'approved': request.user.has_perm('myapp.can_view')}