【问题标题】:django {% if user.groups == 'FC' %} doens't work [duplicate]django {% if user.groups == 'FK' %} 不起作用[重复]
【发布时间】:2017-12-12 12:43:19
【问题描述】:

我正在使用 django 制作网站。

{% if user.groups == 'FC' %} 在我的模板中不起作用。我有这样的组。

例如,我的一个用户(用户名为“hong”)属于“FC”组,如下所示。

但是,

{% if user.groups == 'FC' %}
      <li><a href="{% url 'register' %}">register form</a></li>
      <li><a href="{% url 'mypage' %}">fc's my page</a></li>
{% else %}
 <li><a href="{% url 'PT_mypage' %}">fitness' my page</a></li>
{% endif %}

如果 user.groups == ' ' 不起作用。

如何查看用户组?我必须按组区分用户。

【问题讨论】:

    标签: django


    【解决方案1】:

    您必须使用tags。 在您的应用程序中,您可以创建一个名为:templatetags 的目录。

    然后,您必须在文件user_tags.py 中创建一个包含:

    from django import template
    from django.contrib.auth.models import Group 
    
    register = template.Library() 
    
    @register.filter(name='has_group') 
    def has_group(user, group_name):
        group = Group.objects.filter(name=group_name)
        if group:
            group = group.first()
            return group in user.groups.all()
        else:
            return False
    

    然后,在你的模板中,如果你想指定部分,...

    {% load user_tags %}
    ...
    ...
    {% if request.user|has_group:"yourgroupe" %}
    # part which will only accessible for users registered in `yourgroup` 
    {% endif %} 
    

    它在我的应用程序中适用于不同的组(管理员、用户、访问者、..);)

    【讨论】:

    • 有效!非常感谢:)
    【解决方案2】:

    下面试试

    {% for group in  request.user.groups.all %}
    {%  if 'FC' == group.name %}
       <<< write your code that you want >>>
    {% endif %}
    {% endfor %}
    

    【讨论】:

    • 这是最好的解决方案吗?
    • 如果一个用户有超过 1 个组怎么办?
    • 如果是 2 组,它确实会翻倍。
    • 但是组有两次同名? @DerekPK
    • 不同的组 2 次,group0 然后 group1 等等。然后我无法检查用户是否有 2 个组,它将返回 false。 if 'group0' == group.name and 'group1' == group.name,有group0和group1的用户还是会返回false。
    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 2012-11-30
    • 2023-02-06
    • 1970-01-01
    • 2015-05-09
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多