是否有任何人知道如何摆脱的“HTTP://”在Django urlfield前缀。
我的意思是,当我们定义一个字段作为urlfield并尝试输入网址吧,Django会自动添加的“http://”前缀,如果没有架构提供。 我不希望这样的前缀。
我尝试下clean_field和清洁方法将其删除。 它不工作。
我深入到源代码。 我看到Django的添加的“http://”下UrlField类的to_python“的方法。
有什么办法来覆盖它摆脱的“http://”的?
是否有任何人知道如何摆脱的“HTTP://”在Django urlfield前缀。
我的意思是,当我们定义一个字段作为urlfield并尝试输入网址吧,Django会自动添加的“http://”前缀,如果没有架构提供。 我不希望这样的前缀。
我尝试下clean_field和清洁方法将其删除。 它不工作。
我深入到源代码。 我看到Django的添加的“http://”下UrlField类的to_python“的方法。
有什么办法来覆盖它摆脱的“http://”的?
如果没有一个方案前缀字符串不能成为一个真正的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)