有没有办法使用Django 2.0及更高版本的语法来区分大小写的URL?
例如
path('profile / str:username / add / ',views.AddFriendRedirect.as_view(),name='add_friend'),
如果我执行profile / USERNAME
,而用户名全为小写,那么如何使它不区分大小写?因此,即使uSErnAmE也有效
我知道那里有旧的url语法的问题和答案,但是我想知道它是否是具有新的path语法的possilbe。
问题来源:stackoverflow
有没有办法使用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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。