2015-03-13 41 views
0

我有一個Django項目,其中包含URLField模型。對於同一個項目,我正在編寫非Django Python腳本,並希望對URL進行規範化。Python - Django URLField

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 

如何正常化網址?是否有可能將網址投射到Django的實例URLField?理想情況下,我寧願所有網址的格式與url2相同。

謝謝!

+0

什麼是你的問題的例子嗎?我不明白。 – Juca 2015-03-13 16:06:09

+0

@Juca謝謝,我已經更新了這個問題 – nickbusted 2015-03-13 16:09:37

+0

嗯,我想你可以使用@felix代碼來標準化url,然後使用以下命令創建django url:'url(r'%s'%normalised_url,my_view)' – Juca 2015-03-13 19:01:58

回答

1

我不確定你想要達到什麼目的,但要標準化你的網站,看起來像第二個,你可以使用正則表達式,並使用正則表達式模塊進行替換。

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

,將採取的形式//blabla.comwww.blabla.comhttp://blabla.com和任何URL返回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