Почему я не могу включить пользовательские настройки в качестве переменных в шаблоны Django?

Я пытаюсь сделать что-то действительно глупое: показать некоторые переменные настроек в шаблоне Django (используя Django 1.5). Итак, если я попробую это:

<p>Timezone: {{ TIME_ZONE }}</p>

Я получаю часовой пояс, определенный в моем файле настроек. Все идет нормально.

Но теперь, допустим, я определяю этот новый параметр:

FOO = 'bar'

И попытаться:

<p>Foo: {{ FOO }}</p>

Я не вижу значение переменной. Почему?

Я знаю, что могу передавать переменные в шаблоны из представлений, но что, если я хочу определить имя и описание для своего проекта только в одном месте и показать их в любом шаблоне? Это одна из простых задач, которые я хочу выполнить.

Такая проблема предполагает, что я делаю что-то неправильно (имеется в виду правильно, «как, по мнению Джанго, это должно быть сделано»), но я не знаю, почему.


person Jorge Arévalo    schedule 14.11.2013    source источник


Ответы (1)


В ваших шаблонах доступна переменная TIME_ZONE, поскольку в настройках включен django.core.context_processors.tz контекстный процессор.
Ссылка: https://docs.djangoproject.com/en/dev/topics/i18n/timezones/#get-current-timezone.

Для других настроек вам нужно будет написать свой собственный процессор контекста или отправить значения настроек из представления.
Вы можете импортировать настройки вашего проекта следующим образом: from django.conf import settings.
Документы рекомендуют использовать его вместо локального файла настроек.

Подробности можно найти здесь: https://docs.djangoproject.com/en/dev/topics/settings/#using-settings-in-python-code

person Alex Parakhnevich    schedule 14.11.2013
comment
Спасибо за Ваш ответ. Это решает проблему. Но тогда у меня есть сомнение: написание процессора контекста — это самый простой способ предоставить определяемую пользователем глобальную переменную для отображения в любом шаблоне? Помимо передачи этой переменной в шаблон каждый раз, когда я хочу ее показать (это не звучит «элегантно») - person Jorge Arévalo; 14.11.2013
comment
Ну, это не может быть проще, чем это. Если вы еще этого не сделали, посмотрите здесь - docs.djangoproject.com/en/dev/ref/templates/api/ - person Alex Parakhnevich; 14.11.2013