URL без учета регистра в Django 3.0? - PullRequest
1 голос
/ 14 марта 2020

Можно ли использовать URL-адреса без учета регистра с синтаксисом Django 2.0 и выше?

Например,

path('profile/<str:username>/add/',views.AddFriendRedirect.as_view(),name='add_friend'),

Если я это сделал profile/USERNAME , когда имя пользователя - это имя пользователя во всех строчных буквах, как я могу сделать так, чтобы оно не чувствительно к регистру? Так что даже uSErnAmE действителен

Я знаю, что есть вопросы и ответы для старого синтаксиса url, но я хотел бы знать, возможно ли это с новым path синтаксисом

1 Ответ

2 голосов
/ 14 марта 2020

Есть ли способ создать 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'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...