Наследование шаблонов django python framework

Любой человек сталкивавшийся с веб разработкой рано или поздно понимает, что ему ужасно надоело копировать кучу 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, как вы понимаете туда можно писать что угодно, как и в любой другой блок.

Источник: malimar.ru

teamviewer-com
Не копируйте текст!