Django i18n_patterns без косой черты

Я пытаюсь избавиться от косой черты в URL-адресах. В настоящее время веб-сервер успешно удаляет косые черты и APPEND_SLASH = false Все работает нормально, но у меня проблема с локализованной домашней страницей:

http://example.com/en/ - ok
http://example.com/en - Page not found (404)

Django tried these URL patterns, in this order:

^admin/
^en/

The current URL, en, didn't match any of these.

Это мои настройки urls.py:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

urlpatterns += i18n_patterns(
    url(r'^$', views.index, name='index'),
)

Можно ли заставить эти i18n_patterns работать без косой черты?


person MrBinWin    schedule 21.02.2017    source источник
comment
Конечная косая черта запрограммирована. создайте свой собственный подкласс, просто помните, что это частный API.   -  person knbk    schedule 21.02.2017
comment
Добавьте косую черту и удалите APPEND_SLASH из настроек. Плохой вкус, чтобы удалить его.   -  person Andrey Shipilov    schedule 22.02.2017


Ответы (1)


В итоге я создал промежуточное ПО, которое делает следующее:

from django.shortcuts import redirect
from django.utils import translation

def add_i18npatterns_trailing_slash(get_response):
    def middleware(request):
        response = get_response(request)
        if response.status_code == 404:
            language_code = translation.get_language()
            if request.path.endswith(language_code):
                return redirect(f'{request.path}/')
        return response
    return middleware
person Natim    schedule 04.07.2018