Как удалить идентификатор языка из URL-адресов django-cms 2.4?

Я выполнил tutorial, чтобы создать новый сайт Django-CMS (2.4). Я использую только один язык (английский).

Существует автоматическая переадресация, включающая идентификатор языка '/en/' в моих URL-адресах на сайте. Как его удалить?

спасибо.

Ответы

Ответ 1

замените эту регистрацию шаблонов:

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

с этим:

from django.conf.urls import patterns

urlpatterns = patterns('',
  url(r'^admin/', include(admin.site.urls)),
  url(r'^', include('cms.urls')),
)

В учебнике, на котором вы указали, используется метод i18n_patterns, который выполняет именно это: добавляет код языка к вашим URL-адресам.

Также обратите внимание, что вы можете безопасно удалить "django.middleware.locale.LocaleMiddleware" и "cms.middleware.language.LanguageCookieMiddleware" из своего MIDDLEWARE_CLASSES, если вы не будете использовать несколько языков.

Ответ 2

@ppetrid ответ по-прежнему верен. Однако, начиная с Django 1.6 patterns, он больше не доступен. Измените существующий код на это:

from django.conf.urls import patterns

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

Вы также получите предупреждение, если вы также оставите '', в шаблонах.

Ответ 3

Если вы хотите сохранить один язык в URL-адресе, например, потому что у вас есть обратные ссылки в Интернете с кодом языка, вы можете просто вывести другой язык в settings.py

LANGUAGES = (        
    #('en', gettext('en')),
    ('de', gettext('de')),
)

CMS_LANGUAGES = {        
    'default': {
        'public': True,
        'hide_untranslated': False,
        'redirect_on_fallback': True,
    },
    1: [            
        {
            'public': True,
            'code': 'de',
            'hide_untranslated': False,
            'name': gettext('de'),
            'redirect_on_fallback': True,
        },
        # {
        #     'public': True,
        #     'code': 'en',
        #     'hide_untranslated': False,
        #     'name': gettext('en'),
        #     'fallbacks': ['de'],
        #     'redirect_on_fallback': True,
        # },
    ],
}

Таким образом, URL-адрес все еще показывает www.example.com/de/foo.html. В приведенном выше примере, что /de/ будет потерян, что сделает все ваши URL-адреса в Интернете бессмысленными.

Таким образом, с точки зрения SEO это может быть не самый лучший вариант, если вы уже создали ссылки с кодом языка в нем.

Ответ 4

В django версии 1.8.18 вам просто нужно поместить False в эту переменную в settings.py

USE_I18N = False

USE_L10N = False