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

Django获取已登录用户数据库信息并在HTML展示,解决空白页问题

问题根因

你当前页面空白是因为视图查询返回的info数据集为空,同时存在几处逻辑错误:

  1. 过滤条件类型不匹配:request.user是Django的User对象,不是姓名字符串,你用它和first_name字段做匹配,永远找不到符合条件的数据
  2. 模型缺少用户关联逻辑:当前Info表没有和系统用户表绑定,仅靠名字匹配很容易出现重名冲突,也不符合“仅查看自己信息”的安全要求
  3. 模板路径不匹配:视图里指定渲染的是profile/show.html,但你实际的模板文件命名是info.html,如果路径配置不对也会导致渲染异常(你没报错大概率是本地文件命名写错了)

修正方案

1. 调整模型(推荐方案,符合设计规范)

修改models.py,添加外键关联系统用户,避免重名问题:

from django.contrib.auth import get_user_model
User = get_user_model()

class Info(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_info")
    first_name = models.CharField(max_length=120)
    last_name = models.CharField(max_length=120)
    phone = models.CharField(max_length=10)

修改后执行python manage.py makemigrations和python manage.py migrate命令同步数据库结构,后续存储用户表单数据时,要把当前登录用户赋值给Info的user字段再保存。

2. 修正视图逻辑

修改views.py,调整查询逻辑,同时加登录校验避免未登录用户访问异常:

from django.contrib.auth.decorators import login_required

@login_required
def show(request):
    # 关联用户后直接用user字段过滤,精准查询当前用户的信息
    info = Info.objects.filter(user=request.user)
    # 注意模板路径要和实际文件对应,如果你模板叫info.html就改成对应路径
    return render(request, 'profile/info.html', {'info': info})

如果你暂时不想改模型,临时修复可以把过滤条件改成filter(first_name=request.user.first_name),但非常不推荐这种写法,重名就会出现数据泄露问题。

3. 模板优化(可选,不影响基础展示)

你的模板里没有<ul>标签包裹列表项,属于语义不规范,不会导致空白,可以按需调整,添加空数据提示避免完全空白:

<h1> Profile  </h1>
<br><br> 
{% if user.is_authenticated %}
<ul>
{% for info in info %}
   <li>First Name: {{ info.first_name }}</li>
   <li>Last Name: {{ info.last_name }}</li>
   <li>Phone Number: {{ info.phone }}</li>
{% empty %}
   <li>暂未保存您的个人信息</li>
{% endfor %}
</ul>
{% endif %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:27:03