2.49M
Category: programmingprogramming

Django: представления и шаблоны

1.

Django:
представления и
шаблоны

2.

Show must go on!
Представление – данные, отображаемые пользователю
(обычно в формате веб-страницы). Генерируется при
помощи специальной функции на основе некоторого
шаблона. Описание производится в файле views.py
Например для приложения-блога могут быть следующие
представления:
• домашняя страница - отображает последние записи ленты;
• страница записи - постоянная страница для одной записи;
• архивы записей - отображает все месяцы, в которых были
сделаны записи в заданном году;
• система комментариев - обрабатывает комментирование
отдельной записи.

3.

Обработка запроса

4.

Адресация
URLconf - это модуль, содержащий конфигурацию адресов
(urls.py), он содержит код Python, который отображает URLшаблоны в связанные функции Python (ваши представления
в views.py).
Список urlpatterns может содержать объекты:
django.urls.path()
django.urls.re_path()

5.

Функция path
Функция path отвечает за связывание
конкретными функциями их обработки.
url-запросов
с
path(route, view, kwargs=None, name=None)
route - содержит url-шаблон.
view - это имя функции представления, которая будет
вызываться.
kwargs - параметры, которые передаются в виде словаря в ФП.
name - имя url’а, позволяет ссылаться на этот url, например, в
шаблонах.
При обработке запроса Django начинает с первого шаблона в
списке urlpatterns и пробивается вниз по списку, сравнивая
запрошенный URL-адрес с каждым URL-шаблоном, пока не
найдет тот, который соответствует.

6.

Пример

7.

Типы преобразований
• str - приводит к непустой строке, исключая разделитель пути ‘/’.
Пр.: 'bio/<username>/' => bio/ivanov, bio/123 (123 - строка)
• int - приводит к нулю или другому положительному целому числу,
возвращает int.
Пр.: 'articles/<int:year>/' => 'articles/2017, 'articles/0 (2017 и 0 - числа)
• slug - приводит к slug-строке, состоящей из ASCII символов, в том
числе дефис и знак подчеркивания. Например, building-your-1stdjango-site.
Пр.: 'articles/<slug:title>/' => /articles/building-a-django-site/
• uuid - приводит к uuid (узнаем при работе с БД), возвращает
объект uuid.
Пр.: ‘users/<uuid:id>’ => users/075194d3-6885-417e-a8a8-6c931e272f00
• path - приводит к непустой строке, включая ‘/’.
Пр.: ‘blog/<path:article>’ => blog/, blog/some-title, blog/123

8.

Обработка запроса

9.

Функция представления
Функция представления (ФП) - это функция Python, которая
принимает Web-запрос и возвращает Web-ответ.
Ответом
может
быть
HTML-содержимое
страницы,
перенаправление, 404 ошибка, XML-документ, изображение и
т.п.
Принято держать ФП в файле views.py, который находится в
каталоге проекта или приложения.

10.

Использование ФП

11.

HttpRequest
HttpRequest - это класс, объекты которого представляют собой
http-запрос, полученный со стороны клиента. Он содержит:
• информацию об URL (path и прочее);
• HTTP-заголовки запроса (http headers);
• информацию об отправленных данных (GET, POST...);
• информацию о сессиях и cookies (session...);
• прочие переменные сервера.

12.

Ну и запросы у вас!

13.

Ну и запросы у вас!

14.

Объекты HttpResponse
Объекты HttpResponse конструируют ответ на запрос

15.

Django.http
Модуль django.http содержит несколько подклассов
HttpResponse, представляющих различные виды HTTPответов:
• HttpResponseRedirect (302);
• HttpResponseNotFound (404);
• HttpResponseForbidden (403);
• HttpResponseServerError (500);
• и другие.

16.

Ответы

17.

Вспомогательные функции
Пакет django.shortcuts содержит вспомогательные функции и
классы “влияющие” на несколько уровней MVC.
• render()
• render_to_response()
• redirect()
• get_object_or_404()
• get_list_or_404()

18.

Функция render()
Функция
render()
выполняет
указанный
шаблон
(template_name) с переданным словарем контекста (context)
и возвращает HttpResponse объект с полученным
содержимым.
render(request, template_name, context=None … )
Обязательные аргументы
• request -- объект обрабатываемого запроса (HttpRequest)
• template_name -- полное название шаблона
Необязательные аргументы
• context -- словарь переменных для контекста шаблона.
По умолчанию, этот словарь пустой
• и другие...

19.

Render()

20.

Шаблоны
Шаблоны - это текстовые файлы (HTML, XML, CSV, и
др.),
которые
содержат
статический
HTML,
динамические данные - переменные, которые будут
заменены значениями при выполнении шаблона, и
специальные теги (не путать с тегами html), которые
управляют логикой шаблона.
Django предоставляет бэкенд для собственной системы
шаблонов, которая называется - язык шаблонов Django
(Django template language, DTL).

21.

Шаблон

22.

Переменные
Когда шаблон встречает переменную, он вычисляет ее и
заменяет результатом.
Нельзя использовать пробелы и знаки пунктуации в
названии переменных.
{{ variable }}

23.

Фильтры
Фильтры - это специальные функции, которые получают
значение переменной и изменяют его в соответствии со
своим назначением. Применяются через символ | после
переменной.
{{ name|lower }} - выведет значение переменной {{ name }}
после применения фильтра lower к нему, который преобразует
значение в нижний регистр.
• Цепочка фильтров: {{ text|escape|linebreaks }} - вывод одного
фильтра используется для другого.
• Аргументы фильтров: {{ bio|truncatewords:30 }} - этот код
отобразит первые 30 слов переменной bio.
• Аргументы фильтров, которые содержат пробелы, должны
быть заключены в кавычки. Например, чтобы объединить
список пробелом и запятой, используйте {{ list|join:", " }}.

24.

Фильтры
• default. Если значение равно False или пустой строке, будет
использовано значение по умолчанию. В противном случае
используется значение.
{{ value|default:"nothing" }} - если value равно "", будет
выведено nothing.
• length. Возвращает размер значения (работает для строк и
списков).
{{ value|length }} -- если value равно ['a', 'b', 'c', 'd'], выведет 4.
• Список встроенных фильтров
• Можно создавать свои фильтры => ссылка

25.

Теги
Тег - это специальные конструкции, которые используются для:
• создания текста для вывода
• встраивания операторов (ветвления, циклы)
• загрузки дополнительной информации в шаблоны, чтобы
использовать ее далее через переменные.
Список встроенных тегов
{% tag %}
{% tag %} ... содержимое тега ... {% endtag %}

26.

Теги
• for
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
• if, elif, и else
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
Team: {% for athlete in athlete_list %} ... {% endfor %}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}

27.

Теги
• url
{% url 'some-url-name' v1 v2 %}
{% url 'some-url-name' arg1=v1 arg2=v2 %}
Первый аргумент – это name из path():
path('index/', views.index, name='some-url-name')

28.

Наследование шаблонов
Наследование шаблонов - позволяет создать вам шаблон“скелет”, который содержит базовые элементы вашего сайта и
определяет блоки, которые могут быть переопределены
дочерними шаблонами.
English     Русский Rules