2013-04-30 63 views
5

是否有人知道如何擺脫Django urlfield中的'http://'前綴。django urlfield http前綴

我的意思是,當我們將一個字段定義爲urlfield並嘗試輸入一個url時,如果沒有schema提供,django會自動添加'http://'前綴。我不想要那個前綴。

我嘗試在clean_field和clean方法下將其刪除。它不起作用。

我深入瞭解源代碼。我看到django在UrlField類下的'to_python'方法中添加'http://'。

有什麼辦法可以重寫它來擺脫'http://'嗎?

回答

4

沒有方案前綴,字符串不能是真正的URL,因此,URLField將不支持它。

然而,URLField是非常簡單,只是一個CharFieldURLValidator,所以如果你寫一個新的SchemelessURLValidator(源自內置的一個),並添加到正常CharField,要,應該讓你走。

事實上,新的驗證可能是那樣簡單

class SchemelessURLValidator(URLValidator): 
    regex = re.compile(
    r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain... 
    r'localhost|' # localhost... 
    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4 
    r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6 
    r'(?::\d+)?' # optional port 
    r'(?:/?|[/?]\S+)$', re.IGNORECASE) 
+0

這聽起來像一個可接受的解決方案。謝謝 – 2013-04-30 20:20:25

+0

我試過了。至少在Django 1.5中,它變得非常混亂。它仍然有效。 – alanjds 2014-02-11 18:30:58