2013-04-30 40 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