考虑一个 HTML 文件(名称为“index.html”),其中包含用于制作下拉菜单的代码。该代码如下所示:
<select name = "from_length">
<option value = "choose_1" {{ select_1_1 }}>Metre</option>
<option value = "choose_2" {{ select_1_2 }} >Kilometre</option>
<option value = "choose_3" {{ select_1_3 }}>Millimetre</option>
</select>
上面的代码在 HTML 中创建了一个下拉菜单。 “{{ }}”大括号将由 Jinja 渲染,其中“select_1_1”、“select_1_2”或“select_1_3”之一最终将传递一个值“selected”。也就是说,当我尝试借助 Flask 中的 render_template 渲染上述代码时,通过以下代码:
return render_template('index.html', select_1_2 = "selected")
上述代码应呈现如下:
<select name = "from_length">
<option value = "choose_1">Metre</option>
<option value = "choose_2" selected >Kilometre</option>
<option value = "choose_3">Millimetre</option>
</select>
这意味着当向用户显示网页index.html时,用户将在下拉菜单中默认看到“公里”(而不是第一个选项“米”)
所以,简而言之,我试图向用户显示默认列表选项(即“米”、“公里”或“毫米”之一)。默认列表选项取决于用户的选择,因此可能会有所不同。
现在,我来谈谈我的问题的Python部分。假设名为 a_string
的变量存储 {{select_1_1}}
、{{select_1_2}}
或 {{select_1_3}} 中的哪一个
应作为“选定”传递给 render_template。因此,如果我希望“select_1_2”应该是选定的选项(即,如果我希望用户在打开网页时默认看到“公里”),那么 a_string 应存储“select_1_2”,或者:
a_string = "select_1_2"
正如我所提到的,a_string
包含的字符串可能会根据用户在网页上的行为而改变。
现在我面临着两难的境地。假设 a_string 存储“select_1_2”(即我希望向用户显示的默认选项为“公里”)。当我尝试将以下代码放入 python 中时(目的是向用户显示的默认选项应为“公里”):
return render_template('index.html',a_string = "selected")
我在网页上显示“米”(这是第一个选项)(而不是“公里”)。
所以,我想知道,是否有办法在使用 render_template 时将存储在 a_string
中的字符串作为 selected
传递。
预先感谢您对我的帮助。
最佳答案
有几种方法可以解决这个问题。
我认为最简单的答案是“用不同的方式来做”。您应该生成菜单,而不是静态地将菜单嵌入到 HTML 中:
<select name = "from_length">
{% for optval, optinfo in options.items() %}
<option value="optval" {% if optinfo.selected|default(false) %}selected{% endif %}>
{{ optinfo.name }}
</option>
{% endfor %}
</select>
然后在您的 Python 代码中,您将定义菜单:
options = {
'choose_1': {'name': 'Metre'},
'choose_2': {'name': 'Kilometre'},
'choose_3': {'name': 'Millimetre'},
}
options['choose_2']['selected'] = True
这使得处理“选择哪个项目”逻辑变得更加容易。
但是,如果您有以下情况,请继续采用原来的方法:
a_string = "select_1_2"
然后你可以像这样调用render_template
:
return render_template('index.html', **{a_string: "selected"})
关于python - 将Python中的字符串作为变量传递给Flask中的render_template(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58934170/