URL без учета регистра для Django? - PullRequest
37 голосов
/ 04 октября 2009

Кажется, что по умолчанию решатель URL в django выполняет поиск с учетом регистра для определения URL и различает '/ Login' и 'login'. Мои шаблоны URL следующие:

urlpatterns = patterns('',
    (r'^admin/(.*)', admin.site.root),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': settings.STATIC_DOC_ROOT, 'show_indexes': True}),
    (r'^login/$', 'django.contrib.auth.views.login'),
    (r'^logout/$', do_logout),
)

Может кто-нибудь подсказать, как сделать регистр Django без учета регистра?

Ответы [ 3 ]

88 голосов
/ 04 октября 2009

Просто поставьте (?i) в начале каждой r'...' строки, т.е.:

urlpatterns = patterns('',
(r'^(?i)admin/(.*)', admin.site.root),
(r'^(?i)static/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': settings.STATIC_DOC_ROOT, 'show_indexes': True}),
(r'^(?i)login/$', 'django.contrib.auth.views.login'),
(r'^(?i)logout/$', do_logout),
)

указывать каждому RE совпадать без учета регистра и, конечно же, жить долго и счастливо! -)

11 голосов
/ 09 августа 2018

В Django 2.1, похоже, что (?i), помещенный в любом месте внутри регулярного выражения URL, заставит его игнорировать регистр. Однако reverse() завершается неудачей, если (?i) не следует за $ в конце регулярного выражения.

from django.urls import re_path, reverse
from django.shortcuts import render

def home_page(request):
    foo = reverse('home_page')
    return render(request, 'home.html')

urlpatterns = [ re_path(r'home/(?i)', home_page, name='home_page') ]

поднимает

ValueError: Non-reversible reg-exp portion: '(?i'

но работает с регулярным выражением r'home/$(?i)'.

1 голос
/ 16 марта 2018

В Django 2.0 (выпущен в декабре 2017 года) рекомендуемый способ использования регулярных выражений для сопоставления URL теперь re_path вместо url:

from django.urls import path, re_path
from . import views

urlpatterns = [   
    re_path(r'^(?i)admin/(.*)', admin.site.root),
    re_path(r'^(?i)something/(?P<somestring>\w+)/$', views.something),
    re_path(r'^(?i)login/$', views.login),
    re_path(r'^(?i)logout/$', views.logout),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...