Django的URLField中的HTTP前缀

8
有没有人知道如何在Django的urlfield中去掉'http://'前缀?当我们将字段定义为urlfield并尝试向其中输入URL时,如果没有提供模式,Django会自动添加'http://'前缀。我不想要那个前缀。我尝试在clean_field和clean方法下删除它,但都不起作用。我查看了源代码。我看到Django在UrlField类的to_python方法中添加'http://'。有没有办法覆盖它以去掉'http://'呢?
1个回答

6
没有方案前缀,字符串不能成为真正的URL,因此URLField不支持它。
然而,URLField基本上只是一个带有URLValidatorCharField,因此如果你编写一个新的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)

我尝试过。至少在Django 1.5中,它变得非常混乱。不过,它还是能用的。 - alanjds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接