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

Django中如何获取用户所属用户组?遇user未定义报错求助

问题解决:Django前端判断用户组报错Uncaught ReferenceError: user is not defined

报错原因

你写的user是Django服务端的模板上下文变量,但这段判断用户组的代码属于前端JavaScript(AJAX回调函数),客户端执行JS时找不到user变量;同时user.groups.filter(...)是Django ORM的服务端语法,前端JS无法识别,因此触发了未定义错误。

两种可行解决方案

方案1:页面渲染时注入用户组信息到前端

在页面模板中添加一段服务端渲染的script标签,把用户组名称列表传给前端:

<script>
  // 服务端渲染时将用户组列表转为JS数组
  const userGroups = {{ user.groups.all.values_list('name', flat=True)|json_script:"user-groups" }};
</script>

修改AJAX回调中的判断逻辑,使用前端的userGroups变量:

if (data.includes('The process is done.')) {
  alert('Success!.');
  setTimeout(function () {
    const targetGroups = ['group1', 'group2'];
    // 判断用户是否在目标组中
    const isInTargetGroup = userGroups.some(group => targetGroups.includes(group));
    if (isInTargetGroup) {
      window.location.href = "{% url 'red' %}";
    } else {
      window.location.href = "{% url 'blue' %}";
    }
  }, 2000);
}

方案2:AJAX响应中返回用户组信息

修改后端视图,处理完业务逻辑后把用户组信息一起返回给前端:

from django.http import JsonResponse

def your_ajax_view(request):
    # 业务处理代码
    # ...
    # 获取当前用户的所有组名称
    user_groups = list(request.user.groups.values_list('name', flat=True))
    return JsonResponse({
        'message': 'The process is done.',
        'user_groups': user_groups
    })

前端AJAX回调中直接使用响应里的user_groups字段判断:

// 假设AJAX请求成功后接收的data包含message和user_groups
if (data.message.includes('The process is done.')) {
  alert('Success!.');
  setTimeout(function () {
    const targetGroups = ['group1', 'group2'];
    const isInTargetGroup = data.user_groups.some(group => targetGroups.includes(group));
    if (isInTargetGroup) {
      window.location.href = "{% url 'red' %}";
    } else {
      window.location.href = "{% url 'blue' %}";
    }
  }, 2000);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:53:30