python - 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
语法是否可能
解决方案
有没有办法让 Django 2.0 及以上语法不区分大小写的 URL?
如果完整的 url 不区分大小写,除了链接的 SO post中的答案之外,我看不到任何其他方式。但我从 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'),
推荐阅读
- python - 如何将 pypi 设置为受信任?
- math - 知道这种“最大和最小”分布吗?
- c# - Newtonsoft自定义Json转换器字符串数组到逗号分隔的字符串WebApi 2
- scala - 多对多加入 Spark 中的大型数据集
- android - 设置模型类和自定义适配器以从 onListItemClick 获取 SQLite DB rowID
- regex - 正则表达式从 CSV 中删除未转义的引号
- javascript - 如何索引对象属性?
- sql - 为什么在动态 SQL 中出现“必须声明标量变量”错误?
- docker - Docker Compose:标志值生成器无效:
- javascript - 实例方法不在NodeJS中的JS模块范围内?