Python - Django URLField

时间:2015-03-13 16:01:07

标签: python django

我有一个包含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格式相同。

谢谢!

2 个答案:

答案 0 :(得分:1)

我不确定你想要实现什么,但要将你的网址标准化为第二个,你可以使用正则表达式并使用正则表达式模块进行替换。

formatted_url = re.sub(r'^((http\:|)//|www\.)?(?P<url>.*)', r'http://\g<url>', your_url)

这将采用//blabla.comwww.blabla.comhttp://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支持。