django URL字段http前缀

django URL字段http前缀,django,url,Django,Url,有人知道如何去掉Django URL字段中的“http://”前缀吗 我的意思是,当我们将一个字段定义为urlfield并尝试输入它的url时,如果没有提供模式,django将自动向其添加“http://”前缀。我不想要那个前缀 我尝试在clean_字段和clean方法下删除它。它不起作用 我深入研究了源代码。我看到django在UrlField类下的“to_python”方法中添加了“http://” 有没有办法覆盖它以摆脱“http://”?如果没有方案前缀,字符串就不能是真正的URL,因此

有人知道如何去掉Django URL字段中的“http://”前缀吗

我的意思是,当我们将一个字段定义为urlfield并尝试输入它的url时,如果没有提供模式,django将自动向其添加“http://”前缀。我不想要那个前缀

我尝试在clean_字段和clean方法下删除它。它不起作用

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


有没有办法覆盖它以摆脱“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中,它变得一团糟。尽管如此,它仍然有效。