You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板语言中基于用户ID筛选分组(含if else条件)

需求1:基于user_id筛选分组

优先推荐在视图层提前处理数据过滤,因为Django模板的核心定位是展示内容,而非复杂逻辑处理,这样效率更高、代码更易维护。

方式1:视图层提前筛选(推荐)

在视图函数/类中直接筛选出符合当前user_id的分组,再传递给模板:

# views.py 示例代码
from django.contrib.auth.decorators import login_required
from .models import Group

@login_required
def your_view(request):
    # 筛选当前用户所属的分组(根据你的Group模型关联字段调整,比如group.user或group.members)
    groups = Group.objects.filter(user_id=request.user.id)
    return render(request, 'your_template.html', {'groups': groups})

模板直接复用你原来的遍历代码即可,因为传进来的已经是筛选后的分组集合。

方式2:模板内直接判断(仅特殊场景参考)

如果必须在模板中实现筛选,可在循环内添加条件判断,仅渲染符合user_id的分组:

<tbody>
  {% for group in groups %}
    {% if group.user.id == user.id %} {# 注意:这里的关联字段请根据你的实际模型调整 #}
    <tr>
        <td>{{group.name}}</td>                                       
        <td><input type="checkbox" name="add_group[]" id="group-{{group.id}}" value="{{group.id}}" checked ></td>
    </tr>
    {% endif %}
  {% endfor %}                                 
</tbody>
需求2:结合if else条件根据用户筛选分组

可根据用户的不同属性(如是否为超级用户、所属用户组、自定义字段等),分场景展示不同分组,同样优先推荐视图层处理。

示例1:区分超级用户与普通用户

视图层处理(推荐)

# views.py
@login_required
def your_view(request):
    if request.user.is_superuser:
        # 超级用户展示所有分组
        groups = Group.objects.all()
    else:
        # 普通用户仅展示自己的分组
        groups = Group.objects.filter(user_id=request.user.id)
    return render(request, 'your_template.html', {'groups': groups})

模板继续使用你原有的遍历代码即可。

模板内直接判断(特殊场景用)

如果需要在模板中直接区分用户类型,代码如下:

<tbody>
  {% for group in groups %}
    {% if user.is_superuser %}
    {# 超级用户显示所有分组 #}
    <tr>
        <td>{{group.name}}</td>                                       
        <td><input type="checkbox" name="add_group[]" id="group-{{group.id}}" value="{{group.id}}" checked ></td>
    </tr>
    {% else %}
    {# 普通用户仅显示自己的分组 #}
    {% if group.user.id == user.id %}
    <tr>
        <td>{{group.name}}</td>                                       
        <td><input type="checkbox" name="add_group[]" id="group-{{group.id}}" value="{{group.id}}" checked ></td>
    </tr>
    {% endif %}
    {% endif %}
  {% endfor %}                                 
</tbody>

示例2:根据用户自定义属性筛选

如果你的用户模型有自定义字段(如is_manager),可按如下方式判断:

<tbody>
  {% for group in groups %}
    {% if user.is_manager %}
    {# 管理员仅显示部门类型的分组 #}
    {% if group.type == 'department' %}
    <tr>
        <td>{{group.name}}</td>                                       
        <td><input type="checkbox" name="add_group[]" id="group-{{group.id}}" value="{{group.id}}" checked ></td>
    </tr>
    {% endif %}
    {% else %}
    {# 普通用户仅显示自己的分组 #}
    {% if group.user.id == user.id %}
    <tr>
        <td>{{group.name}}</td>                                       
        <td><input type="checkbox" name="add_group[]" id="group-{{group.id}}" value="{{group.id}}" checked ></td>
    </tr>
    {% endif %}
    {% endif %}
  {% endfor %}                                 
</tbody>

内容的提问来源于stack exchange,提问作者Shubham Nagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:40:22