如何使用Flask将字典键与描述相关联

时间:2015-03-31 09:12:53

标签: python flask translation

我正在使用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 %}

1 个答案:

答案 0 :(得分:1)

如果您想翻译不同语言的内容,请使用babel / flask-babel。

对我来说,你想要达到的目标并不完全清楚。

  1. 你从哪里拿到钥匙?
  2. 您要翻译漂亮的名字和说明吗?
  3. 但是,如果您要将'weight_of_the_sun'之类的字符串转换为'Weight of the sun',可以考虑使用inflection

    使用inflection.humanize

    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 %}