我有一个包含URLField
模型的Django项目。对于同一个项目,我正在编写非Django Python脚本,并希望规范化URL。
url1 = //habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg
url2 = http://habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg
url3 = www.habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg
如何规范网址?是否可以将URL转换为Django的URLField
实例?理想情况下,我希望所有网址都与url2
格式相同。
谢谢!
答案 0 :(得分:1)
我不确定你想要实现什么,但要将你的网址标准化为第二个,你可以使用正则表达式并使用正则表达式模块进行替换。
formatted_url = re.sub(r'^((http\:|)//|www\.)?(?P<url>.*)', r'http://\g<url>', your_url)
这将采用//blabla.com
,www.blabla.com
和http://blabla.com
形式的任何网址并返回http://blabla.com
以下是如何使用
的示例import re
def getNormalized(url):
"""Returns the normalized version of a url"""
return re.sub(r'^((http\:|)//|www\.)?(?P<url>.*)',
r'http://\g<url>',url)
url1 = '//habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg'
url2 = 'http://habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg'
url3 = 'www.habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg'
formatted_url1 = getNormalized(url1)
formatted_url2 = getNormalized(url2)
formatted_url3 = getNormalized(url3)
print(formatted_url1)
# http://habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg
print(formatted_url2)
# http://habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg
print(formatted_url3)
# http://habrastorage.org/files/fa9/f33/091/fa9f330913c0462c8f576393f4135ec6.jpg
答案 1 :(得分:0)
如果您想知道它是如何完成的,请检查代码。在这里,您将找到格式化返回字符串的to_python函数。
https://github.com/django/django/blob/master/django/forms/fields.py#L705-L738
它使用urlparse或更确切地说是django自己的副本用于python2和3支持。