处理Flask网址创建中的空格

Jef*_*eff 4 python flask

在我正在研究的烧瓶应用程序中,我使用美国州名作为URL结构的一部分.状态名称是从python字典中提取的,该字典将状态缩写与其各自的专有名称相链接,例如

state_dict = {"Alabama" : "AL", "Alaska" : "AK",...
Run Code Online (Sandbox Code Playgroud)

当状态名称没有空格时,这很好.例如,http://example.com/Alabama/然而,当有问题的国家中有一个空间,它形成了一个可怜的URL.例如http://example.com/North%20Dakota/

我现在通过小心使用状态名称创建URL来使用类似于state=state.replace(' ', '_')参数的东西来解决这个问题url_for().然而,它很麻烦,看起来很粗糙.

如何更好地使用状态名称作为URL的一部分,而不必每次都手动修改它们?如果解决方案也可用于将大写字母更改为小写,则为额外点.

我已经考虑将状态字典修改为url友好north_dakota,North Dakota但是,在创建要向用户显示的文本时,也会使用dict,并且可读性也很重要.

非常感谢你花时间陪伴!

Cra*_*ast 5

python最常见的模式是使用一对字典进行正向/反向查找,以便进入友好字典.另一方面,通常用于字符串值的这种"url友好"表示的术语是"slug".

# state_slugs lets you lookup either state name or code => its slug
state_slugs = {}
# states_from_slugs lets you lookup the slug => the state name
states_from_slugs = {}

for state_name, state_code in state_dict.items():
    slug = state_name.lower().replace(' ', '_')
    state_slugs[state_name] = slug
    state_slugs[state_code] = slug
    states_from_slugs[slug] = state_name
Run Code Online (Sandbox Code Playgroud)

你可以把它放在它运行一次的地方,比如可能在模块级别,或者在你state_dict创建之后不久.

然后访问其中一个state_slugs['NC']state_slugs['North Carolina']将同时返回"north_carolina"并访问states_from_slugs['north_carolina']将返回'North Carolina'进行反向查找.