首页 > 解决方案 > 如何在 Jinja 模板中动态设置默认选择选项?

问题描述

我正在构建一个仪表板,其中将包含一些有关用户的信息。我正在尝试使用 Django 设置值以选择标签,但该值从未被分配。这是我的代码。

我的模型看起来像这样

class User(models.Model):
    first_name
    last_name
    reg_status

我需要用reg_status. 可以包含三个选项,reg_status它们如下所述:

的值reg_status是动态的。例如,如果我reg_status = mailed从我的视图中传入,我需要<option value='mailed'>被选中。但是,如果我reg_status = register从我的角度传入,我需要<option value='register'>被选中。

这是我尝试在模板中呈现内容的方式:

{% for u in user %}
 <input type='text' value={{u.first_name}}/>
 <input type='text' value={{u.last_name}}/>
 <select value={{u.reg_status}>
  <option value='mailed'>mailed</option>
  <option value='register'>register</option>
  <option value='not register'>not register</option>
 </select>
{% endfor %}

即使值设置为“已注册”或“未注册”,输出也会为所有实例选择“已邮寄”。

标签: djangojinja2

解决方案


您可以使用 Jinja 三元运算符。这有点贪婪,因为您正在执行相同的操作 3 次。您还可以考虑使用 Jinja 设置全局变量(请参阅文档,向下滚动到范围行为)。

<select value='{{ u.reg_status }}'>
  <option value='mailed' {{ "selected='selected'" if u.reg_status == 'mailed' else "" }}>mailed</option>
  <option value='register' {{ "selected='selected'" if u.reg_status == 'register' else "" }}>register</option>
  <option value='not register' {{ "selected='selected'" if u.reg_status == 'not register' else "" }}>not register</option>
 </select>

推荐阅读