我发现最简单的方法是通过使用 context_preprocessor
将所有组名称添加到上下文中。
在你的应用程序中创建一个文件 context_processors.py
并添加以下内容:
def user_groups_processor(request):
groups = []
user = request.user
if user.is_authenticated:
groups = list(user.groups.values_list('name',flat = True))
return {'groups': groups}
在您的设置中,添加新的上下文处理器。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
"context_processors": [
"my_app.context_processors.user_groups_processor"
],
},
},
]
或者如果您更喜欢在settings.py
中进行设置
TEMPLATES[0]['OPTIONS']['context_processors'].append("my_app.context_processors.user_groups_processor")
之后在您的模板中,您可以使用以下内容:
{% if 'vip' in groups %}
<p>Paragraph only visible to VIPs</p>
{% endif %}
Group.objects.filter(name=group_name).exists()
来获取一个布尔值。 - Max Lapreturn user.groups.filter(name=group_name).exists()
以避免多次查询。 - antonagestamfrom django.contrib.auth.models import Group
,是正确的吗? - Clement H.