[英]Case insensitive URLS in Django 3.0?
有沒有辦法讓 Django 2.0 及更高版本的 URL 不區分大小寫?
例如
path('profile/<str:username>/add/',views.AddFriendRedirect.as_view(),name='add_friend'),
如果我做了profile/USERNAME
,當用戶名是 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'),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.