Есть ли способ создать URL-адреса без учета регистра с синтаксисом 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'),