django urlfield http前缀

时间:2013-04-30 18:57:48

标签: django url

有没有人知道如何摆脱' http://' Django urlfield中的前缀。

我的意思是当我们将字段定义为urlfield并尝试输入网址时,django会自动添加' http://'如果没有架构提供,则为它的前缀。我不想要这个前缀。

我尝试在clean_field和clean方法下删除它。它没有用。

我深入研究了源代码。我看到django添加' http://' in' to_python' UrlField类下的方法。

有没有办法覆盖它以摆脱' http://'?

1 个答案:

答案 0 :(得分:4)

如果没有方案前缀,则字符串不能是真正的URL,因此URLField将不支持它。

但是,URLField几乎只是CharField URLValidator,所以如果你写一个新的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) ,这应该可以让您到达目的地。

事实上,您的新验证器可以像

一样简单
{{1}}