django URL字段http前缀
有人知道如何去掉Django URL字段中的“http://”前缀吗 我的意思是,当我们将一个字段定义为urlfield并尝试输入它的url时,如果没有提供模式,django将自动向其添加“http://”前缀。我不想要那个前缀 我尝试在clean_字段和clean方法下删除它。它不起作用 我深入研究了源代码。我看到django在UrlField类下的“to_python”方法中添加了“http://”django URL字段http前缀,django,url,Django,Url,有人知道如何去掉Django URL字段中的“http://”前缀吗 我的意思是,当我们将一个字段定义为urlfield并尝试输入它的url时,如果没有提供模式,django将自动向其添加“http://”前缀。我不想要那个前缀 我尝试在clean_字段和clean方法下删除它。它不起作用 我深入研究了源代码。我看到django在UrlField类下的“to_python”方法中添加了“http://” 有没有办法覆盖它以摆脱“http://”?如果没有方案前缀,字符串就不能是真正的URL,因此
有没有办法覆盖它以摆脱“http://”?如果没有方案前缀,字符串就不能是真正的URL,因此,
URLField
将不支持它
然而,URLField
几乎只是一个带有urlvalidater
的CharField
,因此如果您编写一个新的schemelsurlvalidater
(源自内置的)并将其添加到一个普通的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)
我试过了。至少在Django 1.5中,它变得一团糟。尽管如此,它仍然有效。