我正在使用Flask来构建我的Web应用程序。 我有一个带有一些键的字典,不幸的是这些键对于用户来说不易读。我想为每个键显示更好的名称和描述句子。
我的键显示在jinja2循环中,遍历字典。
我的实际页面:
key_1 : value_1
key_2 : value_2
我想要的页面:
Nice name for key1 (Description of the key1) : value_1
Nice name for key2 (Description of the key2) : value_2
我已经查看了flask-babel扩展,但它似乎不合适,因为jinja2模板中的键将在运行时显示。即使我手动创建一个包含所有可能键的.po文件,我怀疑它是否能正常工作。
我正在考虑使用数据库进行对应,但我认为这可能不是最好的方法
key_1 = { name : "Nice name for key1"
description : "Nice description for key1"
}
您认为做这种对应的最佳方式是什么?
修改 我的钥匙来自一个从烧瓶传递给模板的字典。我不认为词典的来源很重要。
所以它看起来像return render_template(mypage.html, dictionnary=dictionnary)
我并不是真的想在第一时间翻译我的名字和描述,只需在字典的键和名称和描述之间建立一个链接,以便用户可以理解。我虽然使用flask-babel导致它首先看起来像做这种链接的方式。不幸的是,我认为因为我的密钥是在运行时使用jinja2生成的,所以它不起作用。
{% for key,value dictionnary.iteritems()%}
<li> {{ key }}, {{value}} </li>
{% endfor %}
答案 0 :(得分:1)
如果您想翻译不同语言的内容,请使用babel / flask-babel。
对我来说,你想要达到的目标并不完全清楚。
但是,如果您要将'weight_of_the_sun'
之类的字符串转换为'Weight of the sun'
,可以考虑使用inflection
import inflection
print(inflection.humanize('weight_of_the_sun'))
# Prints: Weight of the sun
根据您的想法,其他一些功能也可能有用。
编辑:如果您没有翻译任何内容,请不要费心寻找巴贝尔。
我会推荐一些结构,如:
your_dict = {
'key_1': {
'name': "Whatever name",
'value': Whatever value,
'description': "Whatever description"
}, ...
}
使用它,
{% for key, struct in your_dict.iteritems() %}
<li>{{ key }} {{ struct['name'] }} {{ struct['description'] }} {{ struct['value'] }}</li>
{% endfor %}
或强>
your_list = [
{
'key': 'key_1',
'name': "Whatever name",
'value': Whatever value,
'description': "Whatever description"
}, ...
]
注意:我更喜欢这个,因为您可以订购list
。
使用它,
{% for struct in your_list %}
<li>{{ struct['key'] }} {{ struct['name'] }} {{ struct['description'] }} {{ struct['value'] }}</li>
{% endfor %}