Найти - Пользователи
Полная версия: Почему в шаблоне request.LANGUAGE_CODE не определен?
Начало » Django » Почему в шаблоне request.LANGUAGE_CODE не определен?
1 2
Nick2009
Вызываю по очереди шаблоны унаследованные от базового и имеющие одинаковые блоки. Представления разные, но там ничего с request.LANGUAGE_CODE не делается. В одном шаблоне он возвращает ‘ru’, в другом возвращает пустую строку, переключаюсь на первую, опять ‘ru’. При переключении никаких параметров или действий для изменения языка не делается.

Если же в первой странице попытаться устанавливать язык через GET запрос - /i18n/setlang/?language=en
то ничего не происходит, request.LANGUAGE_CODE не меняется с ‘ru’ на ‘en’

Урл стандартный
(r'^i18n/', include('django.conf.urls.i18n')),




тэкс…

1)контекст процессор добавил - ‘django.core.context_processors.request’,

2)параметр RequestContext во все render_to_response добавил
render_to_response(“index.html”, locals(),context_instance=RequestContext(request))

3), import сделал.
from django.template.context import RequestContext

Вообще ничего не изменилось. Что еще забыл?
slav0nic
/i18n/setlang/?language=en делать надо через post запрос, смотри сорцы
'django.middleware.locale.LocaleMiddleware' подключил?
Nick2009
slav0nic
/i18n/setlang/?language=en делать надо через post запрос, смотри сорцы
'django.middleware.locale.LocaleMiddleware' подключил?
Вот тут http://djbook.ru/ch18s05.html пишут, что GET должен быть, опять врут. Эх через POST немного больше писать придется.

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.request',
'multilingual.context_processors.multilingual',
)

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.locale.LocaleMiddleware',
'multilingual.middleware.DefaultLanguageMiddleware',
)
Nick2009
slav0nic
/i18n/setlang/?language=en делать надо через post запрос, смотри сорцы
Спасибо! POST работает. Теперь на первой странице языки переключаются. Эта часть вопроса решена.

Но, когда я перехожу на вторую страницу request.LANGUAGE_CODE становится неопределенным (пустая строка) и языки не переключаются и при переходе на любую другую страницу тоже самое.

Отличие между страницами только в урлах и HTML.
Урл работающей страницы index.html - ‘^$’

у остальных /blabla/bla/1/2/3/
slav0nic
RequestContext передаётся в той вьюхе? в доках же написано
If you don't use the RequestContext extension, you can get those values with three tags:

{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
Nick2009
slav0nic
RequestContext передаётся в той вьюхе? в доках же написано
If you don't use the RequestContext extension, you can get those values with three tags:
Это я читал.
В первом сообщении я добавил, что во все вьюхи я добавил RequestContext, но это не помогло.
request.LANGUAGE_CODE тоже взято из док, наверное тоже неправильных, т.к. помогли эти тэги
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
которые я не стал использовать т.к. юзаю RequestContext extension.

Спасибо огромное! В общем, проблему победили, но почему оно так происходит, я не понял.
Nick2009
И снова непонятки. Не воспринимаются установки settings по умолчанию.
LANGUAGES = (
('en', _('English')),
('ru', _('Russian')),
)

DEFAULT_LANGUAGE = 2
LANGUAGE_CODE = 'ru'
Однако, во вьюхе для index.htm:
def index(request):
print request.LANGUAGE_CODE
равно ‘en’

При выборе языка вручную(<form name=“FormSetLanguage” action=“/i18n/setlang/” method=“post” >) на данной странице, те же самые установки устанавливаются правильно.
translation.activate(request.LANGUAGE_CODE)
Попробовал принудительно в urs.py устанавливливать язык по умолчанию, не прокатило
urls.py
from django.conf import settings
from django.conf.urls.defaults import *
from django.utils import translation
translation.activate(settings.LANGUAGE_CODE)
Хотя settings.LANGUAGE_CODE равен ‘ru’ во вьюхе всё равно ‘en’, пока явно в запросе не инициализирую этот параметр при выборе языка.

И самое неприятное, во всем этом то, что при перелогине, по истечении времени жизни сессии, страница с логином опять ‘en’, хотя в сессии был ‘ru’. Естественно, при перелогине настройки языка из-за этого сбиваются.

При первом входе на домашнюю страницу язык должен быть установлен согласно settings.LANGUAGE_CODE.

Почему не воспринимаются настройки settings по умолчанию и почему они сбиваются по истечении времени жизни сессии?!
Nick2009
? :( Пепельницу вытряхивал, стекла протирал, ничего не помогает…
Александр Кошелев
Как вы проводили отладку? Какие были результаты? Какое окружение?
Nick2009
Daevaorn
Как вы проводили отладку? Какие были результаты? Какое окружение?
По данной проблеме никак, т.к. не понятно какие ошибки и где искать. Только документацию и гугл читал. Дефолтная настройка устанавливается фреймворком на основе settings. Окружение? Что имеется в виду? Windows, свежий Django, Chery, Python 2.5
Чем отлаживать такого рода неошибки ?

Вставил сейчас явную ошибку в код. Посмотрел состояние переменных. Там всё нормально. Текста много, что именно нужно, могу сообщить.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB