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投稿の回答以外の方法は表示されません。しかし、私が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]
コメントを追加