|
Table of contents
|
Django предоставляет удобный и мощный API для загрузки шаблонов с диска с целью удаления избыточности в вызовах подгрузки шаблонов и в самих шаблонах. Для использования этого API сначала требуется указать среде разработки где располагаются шаблоны. Это делать надо в файле конфигурации проекта —
Если вы следуете книге, откройте ваш
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
Этот параметр указывает механизму шаблонной системы Django пути, по которым следует искать шаблоны. Укажите требуемый каталог, в котором вы будете хранить шаблоны, например так: TEMPLATE_DIRS = (
'/home/django/mysite/templates',
)
Надо отметить несколько моментов:
После установки TEMPLATE_DIRS, следующим шагом будет изменение кода представления для использования функциональности Django для загрузки шаблонов, вместо указания путей к шаблонам. Возвращаясь к нашему представлению current_datetime, давайте изменим его следующим образом: from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
t = get_template('current_datetime.html')
html = t.render(Context({'current_date': now}))
return HttpResponse(html)
В данном примере, мы использовали функцию
В данном примере наш шаблон имеет имя
Для того, чтобы определить расположение шаблонов на файловой
системе,
Если
Эта страница с ошибкой похожа на такую же, которую мы рассматривали в главе «Представления и привязки URL», только одна вещь тут новая — отладочная информация: секция «Template-loader postmortem». Эта информация неоценима при отладке ошибок загрузки шаблона.
Далее, создадим файл
<html><body>It is now {{ current_date }}.</body></html>
Обновите страницу в вашем браузере и вы увидите результат обработки шаблона.
Мы показали вам как загружать шаблон, заполнять
Речь идёт о функции
Ниже представлен старый знакомый пример
current_datetime, использующий функцию
from django.shortcuts import render_to_response
import datetime
def current_datetime(request):
now = datetime.datetime.now()
return render_to_response('current_datetime.html', {'current_date': now})
Какая разница! Пройдёмся по изменениям в коде:
Первым аргументом функции
Рассмотрим последнюю инкарнацию функции
def current_datetime(request):
now = datetime.datetime.now()
return render_to_response('current_datetime.html', {'current_date': now})
Постоянно вы будете ловить себя на том, что вы вычисляете
значения, сохраняете их в переменных
(см.
Таким образом, если вы один из таких ленивых разработчиков и
вам нравится краткий код, вы можете воспользоваться встроенной
в Python функцией def current_datetime(request):
current_date = datetime.datetime.now()
return render_to_response('current_datetime.html', locals())
Здесь, вместо ручного ввода контекстного словаря, как это было
раньше, вы передали значение функции
Следует обратить внимание при использовании
Может стать неудобно хранить все шаблоны в одном каталоге. Вам может понадобиться хранить шаблоны в подкаталогах вашего каталога шаблонов, это нормально. Действительно, мы рекомендуем делать так. Более продвинутые особенности Django (такие как общая система представлений, которая будет описана в главе «Генерация данных, отличных от HTML») ожидают такое расположение шаблонов по умолчанию.
Хранение шаблонов в подкаталогах несложное занятие. В вашем
вызове t = get_template('dateapp/current_datetime.html')
Так как Нет ограничений на глубину дерева подкаталогов. Используйте столько сколько нужно.
Замечание
Пользователи Windows должны использовать прямой слэш
(/) вместо обратного
(\). Функция
После того как мы описали механизм загрузки шаблонов, мы можем рассказать о встроенном шаблонном теге, который использует его: {% include %}. Этот тег позволяет вам подключать содержимое другого шаблона. Аргументом тега является путь к подключаемому шаблону. Имя шаблона может быть представлено как переменной, так и строкой, заключённой в двойные или одинарные кавычки. Если вы используете один и тот же код в нескольких шаблонах, рассмотрите возможность использования тега {% include %}, чтобы исключить дублирование кода.
Следующий пример дважды подключает содержимое шаблона
{% include 'nav.html' %}
{% include "nav.html" %}
Следующий пример показывает как следует подключать содержимое
шаблона {% include 'includes/nav.html' %}
Следующий пример подключает содержимое шаблона, имя которого
содержится в переменной {% include template_name %}
Подобно функции Подключенные шаблоны обрабатываются в контексте шаблона, который их подключил. Например, рассмотрим два шаблона: # mypage.html
<html>
<body>
{% include "includes/nav.html" %}
<h1>{{ title }}</h1>
</body>
</html>
# includes/nav.html
<div id="nav">
You are in: {{ current_section }}
</div>
При обработке шаблона Если подключаемый шаблон не существует, Django выполнит одно действие из нижеприведённых:
|
Found misprint?
Select it with the mouse and hit Enter
-
Processed:
33
1
199
25
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 601
Русская группа
Ускорить процесс перевода!
ЯМ:41001223475816
|
| © 2008-2012 Ruslan Popov @ gmail.com | Powered by Django 1.2.5 |