Не показывать код языка для языка по умолчанию в URL-адресе сайта Django CMS

Когда я настраиваю многоязычный веб-сайт на базе DjangoCMS, код языка по умолчанию добавляется к URL-адресу:

http://mypage.com/ -> http://mypage.com/en

Я не хочу, чтобы это имело место для языка по умолчанию (например, «en»). Вместо этого я хочу, чтобы язык по умолчанию выбирался, когда в URL-адресе нет идентификатора языка:

http://mypage.com -> Choose English
http://mypage.com/fr -> Choose French
http://mypage.com/it -> Choose Italian

Как это может быть сделано?

Версии:

  • Джанго CMS 3.0.3
  • Джанго 1.6.5
  • Питон 2.7

person anno1337    schedule 29.07.2014    source источник
comment
какую версию django-cms вы используете?   -  person Paulo    schedule 30.07.2014
comment
Версия 3.0.3, извините, что не добавили ее изначально.   -  person anno1337    schedule 31.07.2014


Ответы (2)


Я написал это для проекта, который в настоящее время использует его в производстве, они используют django-cms 2.4.3, но я не понимаю, почему это не будет работать на 3.0, все, что вам нужно сделать, это создать файл middleware.py в одном из ваших приложений, скажем, core, а затем заменить промежуточное программное обеспечение локали django на путь к этому, поскольку это его подкласс.

person Paulo    schedule 01.08.2014

Я столкнулся с аналогичной ситуацией для веб-сайта на основе Django CMS версии 3.4.5 и Django версии 1.8.18. На первый взгляд кажется, что это проблема Django CMS, но позже я понял, что это больше связано с ядром Django, которое было исправлено в последних версиях этого проекта.

Рабочее решение

Простое решение, которое я применил, включало следующие изменения:

  1. Обновите Django до версии 1.11.8 (должна работать любая версия >= 1.10). Этого можно добиться с помощью команды оболочки, такой как pip install Django==1.11.8 --upgrade.
  2. Отредактируйте файл urls.py, чтобы изменить его следующим образом:

Исходное содержимое файла urls.py:

 urlpatterns += i18n_patterns(
     url(r'^admin/', include(admin.site.urls)),  # NOQA
     url(r'^', include('cms.urls')),
 )

Новое содержимое файла urls.py:

 urlpatterns += i18n_patterns(
     url(r'^admin/', include(admin.site.urls)),  # NOQA
     url(r'^', include('cms.urls')),
     prefix_default_language=False
 )
  1. Примените миграции Django, которые являются частью новой версии Django.
  2. Снова запустите проект Django и визуально проверьте новое желаемое поведение.

Я должен упомянуть, что кто-то с ником FalseID на IRC-канале #django-cms дал мне совет найти это решение, а также другие связанные советы.

Другие ссылки

person rodolfojcj    schedule 13.12.2017