Любой человек сталкивавшийся с веб разработкой рано или поздно понимает, что ему ужасно надоело копировать кучу html кода, который повторяется из раза в раз.. от страници к странице..
В MVC фреймворках (которым и является django) всё решается при помощи наследования шаблонов</i>.
Что мы собираемся сделать:
Приложение в котором зададим шаблон — скилет приложения. И страницу, которая его использует.
Итак. Отличительным признаком django является то, что он в его механизме ключевым является именно наследование! Вы не отделяете куски html которые повторяются отдельными файлами, а указываете их при помощи специальных блоков в одном шаблоне. После чего просто наследуете его задавая отличные части.
Создайте пустое приложение. (не буду останавливаться. я об этом уже писал)
Задайте папку для шаблонов. Создайте url и view.
Готово? отлично.
Нет? идём в поиск по сайту..
Допустим у нас такая структура:
/
views.py
__init__.py
manage.py.
settings.py
urls.py
templates/
/* тут создаём шаблоны */
Едем дальше.
В папке с шаблонами ( у меня templates ) создаём базовый шаблон — base.html
<!DOCTYPE html>
<html lang=’ru’>
<head>
<meta content=»text/html; charset=utf-8″>
<title> {% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
Что произошло:
Мы просто создали обычный html файл со структурой приложения (страници) . Собственно в примере просто head и боди с блоком content
Что такое блок? Это пожалуй как масляное масло
При помощи конструкции
{% block some_name %}
Где some_name — имя блока. Это имя — аналог имени переменной, которая будет заполнена в представлении при использовании шаблона. Только не путайте!!! Это аналог, не переменная. В блоке наследнике эту переменную надо будет туда внести.
Как видите мы выделили различные части в странице! Всё одинаковое никак не отмечается.
Теперь создадим шаблон для главной страници (например).
Пускай его зовут main.html:
{% extends «base.html» %}
{% block title %}
{{title}}
{% endblock %}
{% block content %}
<p>Hello world.</p>
{% endblock %}
В первой строке наследуем «каркас».
Затем указываем то, что хотим видеть в блоке внутри тегов block.
Ну и представление. Чтобы было понятно.
def main(req):
return render_to_response(‘main.html’,{‘title’:»title of the page»})
Как видите мы задаём переменную title, оторая вносится в блок title
Блок с контентом мы заполнили статическим текстом — hello world, как вы понимаете туда можно писать что угодно, как и в любой другой блок.
Источник: