【问题标题】:django urlfield http prefixdjango urlfield http 前缀
【发布时间】:2013-04-24 19:06:28
【问题描述】:

有谁知道如何去掉 Django urlfield 中的“http://”前缀。

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

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

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

有没有办法覆盖它以摆脱'http://'?

【问题讨论】:

    标签: django url


    【解决方案1】:

    没有方案前缀,字符串不能是真正的 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 中,它变得一团糟。尽管如此,它仍然有效。
    猜你喜欢
    • 2017-01-31
    • 2021-07-06
    • 2011-03-29
    • 2013-12-29
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多