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

Django 2模板主键对象查询及模板无内容显示问题咨询

你的Django模板问题解决方案

问题1:如何在Django 2模板中查询主键对应的对象?

首先得明确:Django模板的设计原则是尽量避免在模板里写业务逻辑(包括直接查询数据库),最佳实践是在视图层完成数据查询,再把结果传递给模板渲染。具体步骤如下:

  1. 在视图中获取主键对应的对象
    比如你要获取ScrumyUser中主键为user_id的对象,推荐用get_object_or_404(如果主键不存在会返回404页面,比直接用get()更安全):

    from django.shortcuts import get_object_or_404
    from .models import ScrumyUser
    
    def user_detail(request, user_id):
        user = get_object_or_404(ScrumyUser, pk=user_id)
        return render(request, 'user_detail.html', {'user': user})
    
  2. 在模板中直接使用传递过来的对象
    模板里可以直接通过变量名访问对象的字段,注意choices类型的字段要用get_xxx_display获取友好名称:

    <h2>{{ user.fullname }}</h2>
    <p>角色:{{ user.get_role_display }}</p>
    

如果确实有特殊需求要在模板中查询(非常不推荐,会让模板逻辑混乱),可以自定义模板标签,但还是建议优先用视图传参的方式。


问题2:查询数据库后模板无法显示内容的排查方案

结合你提供的模型代码,我整理了几个常见的排查方向:

1. 检查视图是否正确传递了查询结果到模板上下文

这是最常见的问题!比如你要显示所有GoalStatus对象,视图必须把查询结果放进context里:

def goal_list(request):
    goal_statuses = GoalStatus.objects.all()  # 执行数据库查询
    # 一定要把查询结果加入context
    return render(request, 'goal_list.html', {'goal_statuses': goal_statuses})

2. 检查模板语法是否正确

  • 如果是遍历列表,要使用{% for %}标签,并且注意变量名和视图传递的一致,建议加empty分支判断是否真的没有数据:
    {% for status in goal_statuses %}
        <p>状态:{{ status.get_status_display }}</p>
    {% empty %}
        <p>暂无状态数据</p>
    {% endfor %}
    
  • 如果是单个对象,先判断对象是否存在再访问字段:
    {% if user %}
        <p>用户名:{{ user.fullname }}</p>
    {% else %}
        <p>未找到用户</p>
    {% endif %}
    

3. 验证数据库中是否真的有数据

可以通过Django的shell确认查询是否返回结果:

python manage.py shell

然后执行查询:

from your_app.models import ScrumyUser, GoalStatus
print(ScrumyUser.objects.all())  # 查看是否有数据
print(GoalStatus.objects.all())

如果shell里也没有数据,那就是数据库里还没添加记录,需要先创建测试数据。

4. 检查字段引用是否正确

你的ScrumyUser和GoalStatus用了choices字段,直接显示{{ user.role }}只会返回'O'/'A'这类字符,要显示友好名称(比如"Owner")必须用{{ user.get_role_display }},GoalStatus同理用{{ status.get_status_display }}。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:19:31