2015-06-21 2 views
2

Я пытаюсь создать сайт с двумя языками (итальянский и английский) с Django и Python. Я следил за this маленьким учебником, и я сомневаюсь.
Мне не нужна база данных (ни страница администратора) для этого сайта, поэтому я удалил часть настройки базы данных в settings.py, затем активировал «USE_I18N = True» и ugettext и все остальное. На самом деле, когда я иду в локального хоста он показывает правильно оба языка перевода с /он/ и /о/ ставить после локальных: 8000.
Я стараюсь, теперь, чтобы сделать кнопку для переключения языков, добавив djangoproject код в мой файл шаблона здесь:Интернационализация Django для статического сайта

{% load i18n %} 
<form action="{% url 'set_language' %}" method="post"> 
{% csrf_token %} 
<input name="next" type="hidden" value="{{ redirect_to }}" /> 
<select name="language"> 
{% get_current_language as LANGUAGE_CODE %} 
{% get_available_languages as LANGUAGES %} 
{% get_language_info_list for LANGUAGES as languages %} 
{% for language in languages %} 
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}> 
    {{ language.name_local }} ({{ language.code }}) 
</option> 
{% endfor %} 
</select> 
<input type="submit" value="Go" /> 
</form> 

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

ImproperlyConfigured at /it/i18n/setlang/ 
settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details. 
Request Method: POST 
Request URL: http://localhost:8000/it/i18n/setlang/ 
Django Version: 1.8.2 
Exception Type: ImproperlyConfigured 
Exception Value:  
settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details. 

Вот приложение дерево:

sito_personale --- locale --- en --- LC_MESSAGES --- django.mo 
               --- django.po 
          --- it --- LC_MESSAGES --- django.mo 
               --- django.po 
       --- pages --- migration 
         --- static 
         --- templates 
       --- sito_personale 
       --- manage.py 

Есть ли что-нибудь, что я могу сделать, чтобы решить эту проблему?

Я очень ценю любую помощь, которую вы можете предоставить.

+1

Не могли бы вы предоставить свои настройки? Я предполагаю, что это связано с тем, как сохраняется языковое предпочтение ^^ – spectras

+0

Вы имеете в виду весь код settings.py? Если это так, вы здесь: http://codepad.org/7xUdEGKv Я думаю, что в urls.py тоже может быть какая-то ошибка: http://codepad.org/pkUn1xI4 –

ответ

1

Django сохраняет выбранный язык на сеанс. SESSION_ENGINE по умолчанию использует базу данных, и поскольку вы не используете db, это может привести к тому, что вы получаете.

Попробуйте установить SESSION_ENGINE на номер django.contrib.sessions.backends.file, который вместо этого сохранит данные сеанса на диске (см. Using file-based sessions).

Так что в вашем settings.py оных:

SESSION_ENGINE = 'django.contrib.sessions.backends.file' 

Update

Если ваш сайт не нуждается в поддержке сессий вы можете также удалить сессионный промежуточное программное обеспечение. В этом случае Django будет использовать кук для хранения Предпочтения

языка по вид ожидает, что будет называться с помощью метода POST, с языком набором параметров в запросе. Если поддержка сеанса включена, то вид сохраняет выбор языка в сеансе пользователя. В противном случае он сохраняет выбор языка в файле cookie, который по умолчанию называется django_language. (Имя может быть изменено с помощью настройки LANGUAGE_COOKIE_NAME .)


Update последующий вопрос от комментариев

Как в warning in the docs, то i18n модель должна быть в языке независимых urlpatterns:

Предупреждение
Убедитесь, что вы не указали вышеуказанный URL-адрес с n i18n_patterns() - для правильной работы он должен быть независим от языка.

Вот краткий пример того, как это может перевести на ваш urls.py сверху:

urlpatterns = solid_i18n_patterns('', 
    # Examples: 
    # url(r'^$', 'sito_personale.views.home', name='home'), 
    # url(r'^blog/', include('blog.urls')), 
    url(r'', include('pages.urls')), 
) 

urlpatterns += patterns('', 
    url(r'^i18n/', include('django.conf.urls.i18n')), 
) 
+0

Хорошо, есть некоторые успехи : теперь я больше не получаю ошибку dabatase, но когда я нажимаю, чтобы изменить язык (т.е. язык по умолчанию «итальянский», и я выбираю «английский»), страница загружается, но значение в форме возвращается к по умолчанию один. –

+0

И делает ли язык таким же (в данном случае, итальянским), или на странице отображается английский? – sthzg

+0

Остается неизменным. –

0

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

<input name="next" type="hidden" value="{{ redirect_to }}" /> 

в

<input name="next" type="hidden" value="/" /> 

и теперь он работает безупречно! Надеюсь, это лучший способ решить проблему, если кто-то может ответить на мои сомнения в этом, я бы очень признателен.

Смежные вопросы