Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Django_-_podrobnoe_rukovodstvo

.pdf
Скачиваний:
373
Добавлен:
01.03.2016
Размер:
5 Мб
Скачать
☆

480

Приложение D. Параметры настройки

ROOT_URLCONF

Значение по умолчанию: не определено

Строка, описывающая полный путь импорта Python к корневой конфигурации URL (например, “mydjangoapps.urls”). См. главу 3.

SECRET_KEY

Значение по умолчанию: автоматически генерируется при создании проекта.

Секретный ключ для данной инсталляции Django. Используется алгоритмами свертки в качестве затравки. Значением должна быть случайная строка – чем длиннее, тем лучше. Утилита django-admin.py startproject создает ключ автоматически, и обычно изменять его нет необходимости.

SEND_BROKEN_LINK_EMAILS

Значение по умолчанию: False

Определяет необходимость отправки извещений лицам, перечисленным в параметре MANAGERS, всякий раз, как кто-то пытается обратиться к несуществующей странице Django-сайта (получает ошибку 404) с непустым заголовком Referer (то есть имеет место «битая» ссылка). Используется, только если установлен дополнительный процессор CommonMiddleware (см. главу 17). См. также описания параметров

IGNORABLE_404_STARTS и IGNORABLE_404_ENDS.

SERIALIZATION_MODULES

Значение по умолчанию: не определено

Механизм сериализации все еще активно разрабатывается. Дополнительные сведения см. на странице http://docs.djangoproject.com/en/dev/ topics/serialization/.

SERVER_EMAIL

Значение по умолчанию: ‘root@localhost’

Адрес отправителя электронной почты для сообщений об ошибках, которые рассылаются, например, лицам, перечисленным в параметрах

ADMINS и MANAGERS.

SESSION_COOKIE_AGE

Значение по умолчанию: 1209600 (две недели, выраженные в секундах) Срок хранения сеансовых cookie. См. главу 14.

Перечень имеющихся параметров

481

SESSION_COOKIE_DOMAIN

Значение по умолчанию: None

Домен сеансовых cookie. Для междоменных cookie следует указывать значение вида “.lawrence.com”, а для стандартных, отправляемых только в пределах текущего домена, следует оставить None. См. главу 14.

SESSION_COOKIE_NAME

Значение по умолчанию: ‘sessionid’

Имя сеансового cookie, может быть произвольным. См. главу 14.

SESSION_COOKIE_SECURE

Значение по умолчанию: False

Определяет, должен ли сеансовый cookie быть безопасным. Если равен True, то cookie будет помечен признаком «secure», и броузер будет посылать его только по HTTPS-соединению. См. главу 14.

SESSION_EXPIRE_AT_BROWSER_CLOSE

Значение по умолчанию: False

Определяет необходимость завершения сеанса при закрытии клиентского броузера. См. главу 14.

SESSION_SAVE_EVERY_REQUEST

Значение по умолчанию: False

Определяет необходимость сохранения данных сеанса при каждом запросе. См. главу 14.

SITE_ID

Значение по умолчанию: не определено

Целое число, равно идентификатору текущего сайта в таблице базы данных django_site. Применяется, чтобы приложение могло пользоваться единой базой данных для обслуживания нескольких сайтов. См. главу 16.

TEMPLATE_CONTEXT_PROCESSORS

Значение по умолчанию:

(“django.core.context_processors.auth”, “django.core.context_processors.debug”, “django.core.context_processors.i18n”, “django.core.context_processors.media”)

482

Приложение D. Параметры настройки

Кортеж, содержащий вызываемые объекты, которые используются для заполнения контекста, представленного объектом RequestContext. Каждый такой объект принимает в качестве аргумента объект запроса и возвращает словарь элементов, добавляемый в контекст. См. главу 9.

TEMPLATE_DEBUG

Значение по умолчанию: False

Включает или выключает режим отладки шаблонов­. Если имеет значение True, то на красиво отформатированной странице выводится подробный отчет об ошибках, таких как TemplateSyntaxError. Отчет содержит объемлющий фрагмент шаблона,­ в котором строка, содержащая ошибку, выделена цветом.

Отметим, что страницы ошибок выводятся, только если параметр DEBUG имеет значение True. Поэтому, чтобы воспользоваться этим средством, необходимо также включить параметр DEBUG.

См. также описание параметра DEBUG.

TEMPLATE_DIRS

Значение по умолчанию: () (пустой кортеж)

Список каталогов с исходными файлами шаблонов­ в порядке просмотра. Отметим, что компоненты пути в именах каталогов должны разделяться символами прямого слеша даже на платформе Windows. См. главы 4 и 9.

TEMPLATE_LOADERS

Значение по умолчанию:

(‘django.template.loaders.filesystem.load_template_source’, ‘django.template.loaders.app_directories.load_template_source’)

Кортеж, содержащий вызываемые объекты (в виде строк), которые знают, как импортировать шаблоны­ из различных источников. См. главу 9.

TEMPLATE_STRING_IF_INVALID

Значение по умолчанию: ‘’ (пустая строка)

Строка, которую система­ шаблонов­ должна подставлять вместо переменных, отсутствующих в контексте (например, из-за ошибки в имени). См. главу 9.

TEST_DATABASE_NAME

Значение по умолчанию: None

Имя базы данных, используемой при прогоне комплекта тестов. Если указано значение None, то тестовая база будет называться ‘test_’ + settings.

Перечень имеющихся параметров

483

DATABASE_NAME. Описание системы­ тестирования в Django см. по адресу http://docs.djangoproject.com/en/dev/topics/testing/.

TEST_RUNNER

Значение по умолчанию: ‘django.test.simple.run_tests’

Имя метода для запуска комплекта тестов. Используется системой­ тестирования Django, которая описана на странице по адресу http://docs. djangoproject.com/en/dev/topics/testing/.

TIME_FORMAT

Значение по умолчанию: ‘P’ (например, 4 p.m.)

Формат полей времени по умолчанию в списках для изменения, отображаемых в административном интерфейсе Django, и, возможно, в других местах системы­. Синтаксис определения формата такой же, как в теге now (см. приложение E, табл. E.2).

См. также описания параметров DATE_FORMAT, DATETIME_FORMAT, YEAR_MONTH_ FORMAT и MONTH_DAY_FORMAT.

TIME_ZONE

Значение по умолчанию: ‘America/Chicago’

Строка, описывающая часовой пояс для данной инсталляции. Довольно полный перечень строк часовых поясов приводится на странице http:// www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME- TIMEZONE-SET-TABLE.

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

Часовой пояс, указанный в параметре TIME_ZONE, Django обычно записывает в переменную os.environ[‘TZ’]. Поэтому все представления и модели автоматически будут работать в нужном часовом поясе. Однако если значения параметров устанавливаются вручную (см. выше раздел «Определение параметров без установки переменной DJANGO_ SETTINGS_MODULE»), то Django не изменяет переменную окружения TZ, полагая, что вы самостоятельно организуете надлежащее окружение для своих процессов.

Примечание

На платформе Windows нельзя полагаться на изменение фреймворком Django часового пояса. При работе в Windows эта переменная должна соответствовать системному­ часовому поясу.

484

Приложение D. Параметры настройки

URL_VALIDATOR_USER_AGENT

Значение по умолчанию: Django/<version> (http://www.djangoproject.com/)

Строка, используемая в качестве заголовка User-Agent при проверке существования URL (см. описание параметра verify_exists в поле типа URLField в приложении A).

USE_ETAGS

Значение по умолчанию: False

Определяет необходимость вывода заголовка ETag. Позволяет уменьшить трафик, но снижает производительность. Используется, только если установлен дополнительный процессор CommonMiddleware (см. главу 17).

USE_I18N

Значение по умолчанию: True

Определяет необходимость использования системы­ интернационализации Django (см. главу 19). Позволяет быстро отключить интернационализацию для повышения производительности. Если имеет значение False, Django будет производить некоторые оптимизации, такие как отказ от загрузки модулей, отвечающих за интернационализацию.

YEAR_MONTH_FORMAT

Значение по умолчанию: ‘F Y’

Формат полей даты по умолчанию в списках для изменения, отображаемых в административном интерфейсе Django, и, возможно, в других местах системы,­ в случае, когда выводится только год и месяц. Синтаксис определения формата такой же, как в теге now (см. приложение E, табл. E.2).

Например, если страница со списком для изменений в административном интерфейсе Django отфильтрована по дате, то в заголовке для выбранного месяца будет отображаться только месяц и год. Формат зависит от локали. Например, в США дата будет выводиться в виде «January 2006», а в какой-нибудь другой локали – «2006/January».

См. также описания параметров DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT и MONTH_DAY_FORMAT.

E

Встроенные шаблонные­ теги и фильтры

В главе 4 упоминались наиболее полезные из встроенных шаблонных­ тегов и фильтров. Но в Django имеется множество других тегов и фильтров. Они перечислены в настоящем приложении.

Справочник по встроенным тегам autoescape

Управляет автоматическим экранированием. Принимает в качестве аргумента значение on или off и на его основе включает или выключает автоматическое экранирование внутри блока.

Если автоматическое экранирование включено, то HTML-разметка в содержимом всех переменных подвергается экранированию перед выводом (но после применения всех фильтров). Тот же самый результат получился бы в случае применения фильтра escape к каждой переменной.

Исключение составляют переменные, уже помеченные как «безопасные» – либо программой, которая предоставила значение переменной, либо в результате применения фильтров safe или escape.

block

Определяет блок, который может замещаться дочерними шаблонами­. О наследовании шаблонов­ см. главу 4.

comment

Игнорирует все между тегами {% comment %} и {% endcomment %}.

486

Приложение E. Встроенные шаблонные­ теги и фильтры

cycle

Циклически­ выбирает очередную строку или переменную из числа указанных. Внутри циклов­ в каждой итерации будет выбираться очередная строка:

{% for o in some_list %}

<tr class=”{% cycle ‘row1’ ‘row2’ %}”>

...

</tr> {% endfor %}

Также можно указывать имена переменных. Например, если предположить, что имеются две шаблонные­ переменные rowvalue1 и rowvalue2, их перебор можно организовать следующим способом:

{% for o in some_list %}

<tr class=”{% cycle rowvalue1 rowvalue2 %}”>

...

</tr> {% endfor %}

В одном теге допускается указывать одновременно строки и переменные:

{% for o in some_list %}

<tr class=”{% cycle ‘row1’ rowvalue2 ‘row3’ %}”>

...

</tr> {% endfor %}

Иногда бывает необходимо обратиться к очередному значению за пределами цикла­. Для этого достаточно присвоить тегу {% cycle %} имя:

{% cycle ‘row1’ ‘row2’ as rowcolors %}

Теперь перебирать указанные в этом цикле­ значения можно в любом месте шаблона:­

<tr class=”{% cycle rowcolors %}”>...</tr> <tr class=”{% cycle rowcolors %}”>...</tr>

В теге {% cycle %} допускается указывать произвольное количество значений, разделенных пробелами. Значения, заключенные в одиночные или двойные кавычки, считаются строковыми литералами, а значения без кавычек – шаблонными­ переменными.

Ради обратной совместимости тег {% cycle %} поддерживает старый синтаксис, унаследованный от прошлых версий Django. В новых проектах пользоваться им не рекомендуется, но для полноты картины все же покажем, как он выглядит:

{% cycle row1,row2,row3 %}

Справочник по встроенным тегам

487

Здесь каждое значение интерпретируется как строковый литерал, поэтому указать переменные невозможно. Равно как знаки запятых или пробелов. Повторяем, не пользуйтесь таким синтаксисом в новых проектах.

debug

Выводит разнообразную отладочную информацию, в том числе текущий контекст и имена импортированных модулей.

extends

Сообщает о том, что данный шаблон­ расширяет родительский. Используется одним из двух способов:

•• {% extends “base.html” %} (с кавычками) – в качестве имени родительского шаблона­ выступает литерал “base.html”.

•• {% extends variable %} – используется значение переменной variable. Если значение является строкой, то Django считает ее именем роди- тельского шаблона­. Если же значением переменной является шаб­ лон, то он принимается в качестве родительского.

Дополнительные сведения о наследовании шаблонов­ см. в главе 4.

filter

Пропускает значение переменной через фильтры.

Фильтры могут объединяться в цепочки; фильтры могут иметь аргументы. Например:

{% filter force_escape|lower %}

Этот текст подвергается HTML-экранированию и преобразуется в нижний регистр.

{% endfilter %}

firstof

Выводит первую переменную из списка, значение которой в логическом контексте соответствует значению False. Если значения всех переменных соответствуют значению False, не выводит ничего. Например:

{% firstof var1 var2 var3 %}

Эквивалентно следующей конструкции:

{% if var1 %} {{ var1 }}

{% else %}{% if var2 %} {{ var2 }}

{% else %}{% if var3 %}

488 Приложение E. Встроенные шаблонные­ теги и фильтры

{{ var3 }}

{% endif %}{% endif %}{% endif %}

Допускается также указывать строковый литерал, который будет выводиться, когда значения всех переменных в списке соответствуют значению False:

{% firstof var1 var2 var3 “fallback value” %}

for

Обходит в цикле­ все элементы массива. Например, так можно вывести имена спортсменов из списка athlete_list:

<ul>

{% for athlete in athlete_list %} <li>{{ athlete.name }}</li>

{% endfor %} </ul>

Тег {% for obj in list reversed %} позволяет обойти список в обратном порядке.

Чтобы обойти список списков, можно представить значения элементов вложенного списка в виде отдельных переменных. Например, если контекст содержит список points координат (x,y), то для вывода всех точек можно поступить следующим образом:

{% for x, y in points %}

Точка с координатами {{ x }},{{ y }} {% endfor %}

Это бывает полезно, когда требуется выполнить перебор элементов словаря. Например, если предположить, что контекст содержит словарь data, тогда следующий цикл­ выведет все ключи и значения, хранящиеся в этом словаре:

{% for key, value in data.items %} {{ key }}: {{ value }}

{% endfor %}

Во время выполнения цикла­ for устанавливаются переменные, описанные в табл. E.1.

Таблица E.1. Переменные, доступные внутри циклов­ {% for %}

Переменная

Описание

 

 

forloop.counter

Номер текущей итерации цикла­

 

(нумерация начинается с 1)

forloop.counter0

Номер текущей итерации цикла­

 

(нумерация начинается с 0)

 

 

Справочник по встроенным тегам

489

 

Переменная

 

Описание

 

 

 

 

 

 

 

 

 

forloop.revcounter

 

Количество итераций, оставшихся до конца цикла­

 

 

 

(нумерация начинается с 1)

 

 

forloop.revcounter0

 

Количество итераций, оставшихся до конца цикла­

 

 

 

(нумерация начинается с 0)

 

 

forloop.first

 

True, если это первая итерация цикла­

 

 

forloop.last

 

True, если это последняя итерация цикла­

 

 

forloop.parentloop

 

Для вложенных циклов­ содержит ссылку

 

 

 

 

на объемлющий цикл­

 

 

 

 

 

 

В теге for может присутствовать необязательная часть {% empty %}, которая отображается, если указанный массив пуст или не найден в контексте:

<ul>

{% for athlete in athlete_list %} <li>{{ athlete.name }}</li>

{% empty %}

<li>В этом списке нет спортсменов!</li> {% endfor %}

</ul>

Эта конструкция эквивалентна показанной ниже, но короче, элегантнее и, возможно, выполняется быстрее:

<ul>

{% if athlete_list %}

{% for athlete in athlete_list %} <li>{{ athlete.name }}</li>

{% endfor %} {% else %}

<li>В этом списке нет спортсменов!</li> {% endif %}

</ul>

if

Тег {% if %} вычисляет значение переменной в логическом контексте и, если результат равен true (то есть переменная существует, не пуста и не равна булевскому значению False), выводит содержимое блока:

{% if athlete_list %}

Количество спортсменов: {{ athlete_list|length }} {% else %}

Нет спортсменов. {% endif %}

В этом примере, если список athlete_list не пуст, то будет выведено количество спортсменов в нем (переменная {{ athlete_list|length }}).