有没有办法使用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?
如果完整网址不区分大小写,那么除了链接的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'),
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句