有没有人知道如何摆脱' http://' Django urlfield中的前缀。
我的意思是当我们将字段定义为urlfield并尝试输入网址时,django会自动添加' http://'如果没有架构提供,则为它的前缀。我不想要这个前缀。
我尝试在clean_field和clean方法下删除它。它没有用。
我深入研究了源代码。我看到django添加' http://' in' to_python' UrlField类下的方法。
有没有办法覆盖它以摆脱' http://'?
答案 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}}