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

Django数据库数据获取与HTML循环展示:如何获取指定格式名称列表并实现前端遍历?

嘿,我来帮你搞定这个问题!其实你一开始用的name.objects.all()方向完全正确——你看到的<QuerySet [<allName: name1>, ...]>只是这个对象在控制台的字符串表现形式,它本质上是一个可迭代的集合,完全能直接在Django模板里用for循环遍历。下面分两种场景给你具体方案:

1. 在HTML模板中遍历展示所有名称

首先在视图函数里把QuerySet传递给模板:

# views.py
from django.shortcuts import render
from .models import name

def name_list_view(request):
    all_names = name.objects.all()
    return render(request, 'name_list.html', {'all_names': all_names})

然后在HTML模板里,用Django模板标签循环遍历:

<!-- name_list.html -->
<h3>所有名称列表</h3>
<ul>
{% for name_obj in all_names %}
    <!-- 因为你的模型__str__返回了firstname,直接用{{ name_obj }}也可以 -->
    <li>{{ name_obj.firstname }}</li>
{% endfor %}
</ul>

这样就能逐个渲染出数据库里的所有名称了。

2. 生成分号分隔的名称字符串

如果同时需要得到name1; name2; name3这种格式的字符串,有两种方式实现:

方式一:在视图中处理后传给模板

# views.py
def name_list_view(request):
    all_names = name.objects.all()
    # 用列表推导式取出所有firstname,再用分号拼接
    names_str = '; '.join([obj.firstname for obj in all_names])
    return render(request, 'name_list.html', {
        'all_names': all_names,
        'names_str': names_str
    })

然后在模板里直接输出这个字符串:

<p>分号分隔格式:{{ names_str }}</p>

方式二:直接用Django模板过滤器实现

不用在视图里处理,直接在模板里用join过滤器:

<p>分号分隔格式:{{ all_names|join:'; ' }}</p>

这个过滤器会自动调用每个对象的__str__方法(刚好对应你的模型返回的firstname),直接生成你想要的格式。

另外补充一句:你用.get(id=1)只能拿到单个对象是正常的——.get()方法本身就是用来获取唯一匹配的单个实例,要获取所有数据的话,还是得用.all()或者其他返回QuerySet的方法(比如.filter())。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:57:47