开发者社区> 问答> 正文

Django 3.0中不区分大小写的URL?

有没有办法使用Django 2.0及更高版本的语法来区分大小写的URL?

例如

path('profile / str:username / add / ',views.AddFriendRedirect.as_view(),name='add_friend'),

如果我执行profile / USERNAME,而用户名全为小写,那么如何使它不区分大小写?因此,即使uSErnAmE也有效

我知道那里有旧的url语法的问题和答案,但是我想知道它是否是具有新的path语法的possilbe。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 19:00:21 626 0
1 条回答
写回答
取消 提交回答
  • 有没有办法使用Django 2.0及更高版本的语法来区分大小写的URL?

    如果完整的网址不区分大小写,那么除了链接的SO帖子中的答案,我看不到其他任何方式。但是我从OP那里得到的是,只有用户名部分不区分大小写。如果我们使用正则表达式(?i)遵循此解决方案,则此URL也是有效的PrOFile / UsERname / AdD`。

    但是看起来OP只希望用户名比较不区分大小写。使用str转换器,无论在url中传递什么,都将按原样传递给视图。因此,从真正意义上讲,它已经不区分大小写。这里建议的方法应该是在视图中使用“ username__iexact”来获取用户。

    但是,我们希望传递给视图的用户名值与视图所需的格式相同(例如小写),因此我们可以为此注册一个自定义路径转换器。

    因为OP最初使用字符串转换器,所以我们可以扩展它并覆盖to_python来将值转换为小写。我在这里使用小写字母,因为在OP中提到用户名是小写字母。

    class IStringConverter(StringConverter):
    
        def to_python(self, value):
            return value.lower()
    
    # once done, register it as:
    register_converter(IStringConverter, 'istr')
    
    # and use it as:
    path('profile/<istr:username>/add/',views.AddFriendRedirect.as_view(),name='add_friend'),
    

    回答来源:stackoverflow

    2020-03-24 19:00:31
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载