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

Django模型SERVICE_CHOICES元组的前端模板遍历方法咨询

解决Django模板中遍历SERVICE_CHOICES元组列表的问题

嘿,我来帮你搞定这个Django模板遍历choices的问题!首先咱们先对齐下场景——假设你的模型里的SERVICE_CHOICES是这种典型的二元组结构:

from django.db import models

class YourServiceModel(models.Model):
    # 定义服务类型的choices元组
    SERVICE_CHOICES = (
        ('frontend', '前端开发服务'),
        ('backend', '后端开发服务'),
        ('fullstack', '全栈开发服务'),
        ('cloud', '云部署服务'),
    )
    service_category = models.CharField(max_length=30, choices=SERVICE_CHOICES)

第一步:在视图中把choices传递到模板

你提到已经在视图尝试了,这里给你确认下正确的传递方式:

  • 函数视图:直接从模型类中取出SERVICE_CHOICES,放到上下文里
from django.shortcuts import render
from .models import YourServiceModel

def service_list_view(request):
    # 从模型类获取choices元组
    service_options = YourServiceModel.SERVICE_CHOICES
    return render(request, 'services/service_list.html', {'service_options': service_options})
  • 类视图:重写get_context_data方法,把choices加入上下文
from django.views.generic import TemplateView
from .models import YourServiceModel

class ServiceTemplateView(TemplateView):
    template_name = 'services/service_list.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['service_options'] = YourServiceModel.SERVICE_CHOICES
        return context

第二步:在模板中遍历choices

因为SERVICE_CHOICES里的每个元素都是(数据库存储值, 前端显示名称)的二元组,所以遍历的时候可以同时取出两个值,根据你的需求选择不同的展示方式:

场景1:生成下拉选择框

<select id="service-select" name="service">
    {% for value, label in service_options %}
        <option value="{{ value }}">{{ label }}</option>
    {% endfor %}
</select>

场景2:展示为普通列表

<div class="service-options">
    <h3>可选服务类型</h3>
    <ul>
        {% for value, label in service_options %}
            <li>
                <span class="code-value">{{ value }}</span>
                <span class="display-label">- {{ label }}</span>
            </li>
        {% endfor %}
    </ul>
</div>

场景3:编辑页面默认选中当前值

如果是在模型实例的编辑页面,需要给当前选中的选项加上selected属性:

<select id="service-select" name="service">
    {% for value, label in service_options %}
        <option value="{{ value }}" {% if service_instance.service_category == value %}selected{% endif %}>
            {{ label }}
        </option>
    {% endfor %}
</select>

小提示

如果你的SERVICE_CHOICES是单独定义的(不在模型类里),直接在视图中导入这个元组传递给模板就可以,遍历方式是完全一样的哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:38:33