python - 将Python中的字符串作为变量传递给Flask中的render_template()

标签 python flask jinja2

考虑一个 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/

相关文章:

javascript - 从数据库读取并传递给 Flask 中的 JavaScript

python - 在 flask 中的 for 循环中呈现 i 值

javascript - Python Flask 模板使用 {{}} 不能混合 javascript var

python - 使用列表而不是 numpy 数组

Flask-RESTful 与 Flask-RESTplus

python - Groupby & Sum 从某个特定值的出现到另一个特定值或相同值的出现

javascript - 从 javascript 与正在运行的 python 进行通信的正确方法

python - Flask - 在 Ajax/JQuery 中无需重定向即可更新页面内容

Python Mayavi : Adding points to a 3d scatter plot

Python - 没有网格、刻度标签和外主圆(边界)的极坐标图