Это необходимо сделать на уровне веб-сервера (например, с помощью mod_rewrite в Apache) или с промежуточным программным обеспечением (например, этот фрагмент )
Также см. этот ТАК вопрос
Обновление: после вашего комментария я подумал об этом еще немного. Мне понравился ответ Карла Мейера, но потом я понял, что он не справится с реверсированием {% url%} должным образом. Итак, вот что я бы сделал:
Несколько сайтов: Вам необходимо использовать Фреймворк сайтов Django . Это означает создание экземпляров сайта для каждого языка с использованием администратора Django.
Несколько настроек: Каждый языковой сайт также будет иметь свои собственные settings.py. Единственными различиями между каждым сайтом будут настройки SITE_ID
и ROOT_URLCONF
, поэтому, следуя принципу DRY , вы должны сохранить общие настройки в другом файле и импортировать их в мастер-файл следующим образом:
# settings_fr.py
SITE_ID = 1
ROOT_URLCONF = 'app.urls_fr'
from settings_common import *
# settings_de.py
SITE_ID = 2
ROOT_URLCONF = 'app.urls_de'
from settings_common import *
... и т. Д.
Множественный URL-адрес: Как указано выше, URL-адрес для каждого сайта:
# urls_fr.py
urlpatterns = patterns('',
url(r'^Livres/$', books_view, name="books"),
)
# urls_de.py
urlpatterns = patterns('',
url(r'^Bücher/$', books_view, name="books"),
)
... и т. Д.
Таким образом, имя URL (в данном примере "books") одинаково для всех языков, и поэтому {% url books %}
будет полностью изменено, и доменное имя будет полем domain_name объекта Site с SITE_ID
.
Несколько экземпляров веб-сервера: Для правильной работы каждого САЙТА каждый из них должен иметь свои собственные экземпляры сервера. Для apache + mod_wsgi это означает разные приложения wsgi для каждого САЙТА, например:
# site_fr.wsgi
import os, sys, django.core.handlers.wsgi
os.environ['DJANGO_SETTINGS_MODULE'] = 'app.settings_fr'
application = django.core.handlers.wsgi.WSGIHandler()
... и т. Д. Вместе с соответствующим виртуальным хостом apache для каждого сайта:
<VirtualHost *:80>
ServerName mybooks.fr
WSGIScriptAlias / /path/to/site_fr.wsgi
...
</VirtualHost>
Надеюсь, это понятно :) 1050 *