Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在创建url时处理空格_Python_Flask - Fatal编程技术网

Python 在创建url时处理空格

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/

在我正在开发的flask应用程序中,我使用美国各州的名称作为url结构的一部分。状态名称来自python字典,该字典将状态缩写与其各自的专有名称链接在一起,例如

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