Python 在创建url时处理空格
在我正在开发的flask应用程序中,我使用美国各州的名称作为url结构的一部分。状态名称来自python字典,该字典将状态缩写与其各自的专有名称链接在一起,例如Python 在创建url时处理空格,python,flask,Python,Flask,在我正在开发的flask应用程序中,我使用美国各州的名称作为url结构的一部分。状态名称来自python字典,该字典将状态缩写与其各自的专有名称链接在一起,例如 state_dict = {"Alabama" : "AL", "Alaska" : "AK",... 当州名称没有空格时,这很好。e、 g.http://example.com/Alabama/但是,当所讨论的状态中有一个空格时,它会形成一个糟糕的url。e、 g.http://example.com/North%20Dakota/
state_dict = {"Alabama" : "AL", "Alaska" : "AK",...
当州名称没有空格时,这很好。e、 g.http://example.com/Alabama/
但是,当所讨论的状态中有一个空格时,它会形成一个糟糕的url。e、 g.http://example.com/North%20Dakota/
目前,我在使用状态名创建url时会非常小心,将类似于state=state.replace(''''.'.'.'.'.'.
的内容用作url\u for()
中的参数。然而,它很笨重,看起来很粗糙
如何更好地将状态名称作为url的一部分使用,而不必每次手动修改它们?如果该解决方案还可以用于将大写字母更改为小写字母,则需要额外注意
我已经考虑过将state dict修改为url友好型,例如北达科他州
而不是北达科他州
,但是,在创建要显示给用户的文本时,dict也会被使用,可读性也很重要
非常感谢您抽出时间 您是否考虑过生成第二个字典来表示url友好的州名称?为了不必担心将第51个状态(无论何时)添加到两个字典中,您可以在运行时轻松地执行此操作:
state_dictionary = {'South Carolina': 'SC', 'North Carolina': 'NC'}
url_friendly = {k.lower().replace(' ', '_'): v
for k, v in state_dictionary.iteritems()}
或者,对于2.7版之前的python:
url_friendly = dict((k.lower().replace(' ', '_'), v)
for k, v in state_dictionary.iteritems())
产生如下结果:
{'south_carolina': 'SC', 'north_carolina': 'NC'}
python最常见的模式是使用一对字典进行正向/反向查找,从友好的字典到友好的字典。另一方面,通常用于这种字符串值的“url友好”表示的术语是“slug” 你可以把它放在只运行一次的地方,比如可能在模块级,或者在你的
状态_dict
创建之后不久
然后访问state\u slugs['NC']
或state\u slugs['North Carolina']
都将返回“North\u Carolina”,从slugs['North\u Carolina']访问states\u将返回“North Carolina”进行反向查找
# 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