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
相关产品推荐
相关产品推荐

