#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')}