当该应用不属于上下文时,如何编写模板标签,以显示用户是否属于某个应用?

时间:2011-11-11 01:56:52

标签: django django-models django-views

我有一个对用户有FK的应用。

在所有模板中,我需要一个模板标签,用于测试登录用户是否在该应用程序中。

例如......

如果用户位于customer.approved集中,我希望在每个页面上显示模板块。

我一直在玩{%如果在customer.approved%中获得批准} - 但我没有到达任何地方。

欢迎任何建议。

2 个答案:

答案 0 :(得分:0)

如果您设置了用户权限,则可以编写一个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

或者,您可以在会话变量中设置应用程序,然后根据客户批准的外键进行检查。

答案 1 :(得分:0)

我认为您需要的是一个过滤器,用于检查用户是否在您的模型中(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 %}