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

