Российский Новый Университет
Опубликован: 25.01.2016 | Доступ: свободный | Студентов: 2234 / 161 | Длительность: 16:40:00
Лекция 10:

Расширяя Django

< Лекция 9 || Лекция 10: 12 || Лекция 11 >

Цель лекции: Рассмотреть принцип создания пользовательских шаблонов тегов и фильтров, ознакомиться с общими представлениями на основе классов, ознакомиться с вложенными подфреймворками и их основными параметрами.

Ключевые термины: django, фильтр, фреймворк, тег, сообщение, шаблон, модель, пользователь, система, форма, представление, данные, приложение, url, строка

Для вас это было долгое путешествие, и мы поработали со множеством кода и основными концепциями, относящимися к функциональности Django. В этой лекции мы обсудим Django немного больше, если сказать вкратце, различные параметры, такие как настраиваемые теги, фильтры, структуры, системы сообщений и так далее.

Пользовательские шаблоны тегов и фильтры

Система шаблонов Django поставляется с множеством шаблонов тегов и фильтрами, которые делают написание шаблонов легкой и гибкой работой. Иногда, вы, возможно, захотите расширить систему шаблонов собственными тегами и фильтрами. Это обычно происходит, когда вы находите повторяющуюся структуру одного и того же тега множество раз, когда вы хотите обернуть структуру в единый тег, или даже тогда, когда у вас есть фильтр, который вы хотите добавить в систему шаблонов.

Угадайте, что? Django уже позволяет вам сделать это, и это довольно легко! Вы в основном добавите новый пакет к вашему приложению, назовете его templatetags и положите модули, которые содержат теги и фильтры в него. Давайте узнаем об этом, добавив фильтр, который использует строку. Добавим каталог templatetags в родительский каталог mytweets и положим пустой файл под названием_ init_.py туда, так чтобы Python рассматривал каталог как пакет. Теперь создайте модуль под названием mytweet_filters в нем. Мы собираемся написать наш фильтр в этом модуле Вот пример структуры каталога:

templatetags /
|--init .py
|--mytweet_filters.py

Теперь добавьте следующий код к файлу mytweet_filters.py:

from django import template 
register = template.Library()
©register.filter def capitalize(value):
return value.capitalize()

Переменная register является объектом, который может использоваться для введения новых тегов и фильтров в систему шаблонов. Здесь мы использовали декоратор register.filter для добавления функции смены прописных букв в качестве фильтра.

Чтобы использовать новый фильтр из внутри шаблона, добавьте следующую строку в начало вашего файла шаблона:

{% load mytweet_filters %}

Затем можно использовать новый фильтр так же, как любой другой фильтр, предлагаемый Django:

Hi {{ name|capitalize }}!

Добавление пользовательского шаблона тегов работает аналогично с фильтрами. В основном, вы определяете методы для обработки тегов и затем регистрируете тег, чтобы сделать его доступным для шаблонов. Этот процесс немного сложнее, потому что теги могут быть более сложными, чем фильтры. Дополнительную информацию о пользовательских шаблонах тегов доступны в документации по Django

При написании пользовательского фильтра, вы должны заботиться о поведении авто-исключения Django с фильтром. Существует три типа строк, которые могут быть переданы в фильтр:

  • Raw String : строка подготовленная либо командой str или сформированная из символов Unicode. Они автоматически исключаются, если включено автоматическое исключение.
  • Safe strings: эти строки являются строками, которые помечены от дальнейшего исключения. Они не нуждаются в каких-либо дальнейших исключениях. Чтобы пометить вывод как безопаснцю строку, используйте модуль django.utils.safestring.mark_safe().
  • Строки помеченные как "нуждающиеся в исключении": как и предполагает название, их всегда нужно избегать

Общие представления на основе классов

Во время работы с Django, вы заметите, что существуют определенные типы представлений, которые всегда необходимы независимо от проекта, над которым вы работаете. По этой причине Django поставляется с набором представлений, которые можно использовать в любом проекте. Эти представления называются общие представления.

Django предоставляет общие представления для следующих целей:

  • Для создания простых представлений для таких задач, как перенаправление на другой URL-адрес или отображение шаблона.
  • Просмотр и формирование представлений для отображения объектов из модели данных – эти представления аналогичны тому, как страница администратора отображает списки и страницы сведений для данных моделей
  • Для создания страниц на основе даты архива; Это может быть особенно полезно для блогов
  • Для создания, редактирования и удаления объектов в модели данных

Представления Django на основе классов можно настроить путем определения подклассов, или путем передачи аргументов непосредственно в URL-адрес conf.

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

#app_name/views.py
from django.views.generic import TemplateView
class ContactView(TemplateView): 
template_name = "contact.html"

Мы также добавим эту запись в файл urls.py, чтобы получить перенаправление:

project/urls.py
from django.conf.urls.defaults import * 
from some_app.views import ContactView
urlpattems = patterns ('
(r''connect/', ContactView.as_view()),
)

Интересно, что мы можем достичь того же самого, изменив файл и добавив несколько строк в файл urls.py:

from django.conf.urls.defaults import *
 from django.views.generic import TemplateView
urlpattems = patterns('',
(ur1'contact/', TemplateView.as_view (template_name="contact.html") ) ,
)

Вложенные подфреймворки

Пакет Django.contrib содержит стандартную библиотеку Django. Мы использовали следующие подфреймворки из этого пакета в предыдущих главах этой книги:

  • admin: это интерфейс администратора Django
  • auth: это система аутентификации пользователей
  • sessions: это фреймворк сессии Django
  • sindication: это фреймворк генерации фидов

Эти вложенные фреймворки очень упрощают нашу работу, независимо от того, создаем ли мы регистрацию и проверки подлинности, создаем страницу администрирования или предоставляем фиды для нашего содержимого. Пакет Django.contrib является очень важной частью Django. Знание его подпакетов и того, как их использовать, сэкономит вам много времени и усилий.

Этот раздел предоставит вам краткое введение в другие фреймворки в данном пакете. Не буду вдаваться в подробности о том, как пользоваться каждым фреймворком, но вы узнаете достаточно, чтобы знать, когда использовать фреймворк. После того, как вы захотите использовать фреймворки в проекте, вы можете прочитать онлайн-документацию, чтобы узнать больше о нем.

Flatpages

Веб-приложения могут содержать страницы, которые являются статическими по природе. Например, ваш сайт может включать набор страниц справки, которые редко изменяются. Django предоставляет приложение под названием flatpages для обслуживания статических страниц. Приложение является довольно простым; оно предоставляет вам модель данных для хранения различных битов информации о каждой странице, включая следующие:

  • URL-адрес
  • Название
  • Содержимое
  • Имя шаблона
  • Требуется ли регистрация для просмотра страницы

Чтобы использовать приложение, можно просто включить его в переменную INSTALLED_APPS в файле settings.py его middleware в переменную MIDDLEWARE_CLASSES. После этого можно хранить и управлять статическими страницами с помощью модели данных, предоставленной приложением flatpages.

HUMANIZE

Приложение humanize предлагает набор фильтров для добавления прикосновения человека к вашим страницам. Вот список доступных фильтров:

  • apnumber: для цифр 1-9, возвращает число прописью. В противном случае она возвращает само число. Другими словами, 1 становится "один", 9 становится "девять" и так далее, тогда как 10 остается 10.
  • intcomma: Принимает целое число и преобразует его в строку с запятой, например:

    4500 становится 4500.

    45000 становится 45,000.

    450000 становится 450,000.

    4500000 становится 4,500,000.

  • intword: Преобразует целое в легкую для чтения форму, например:

    1000000 становится 1,0 млн.

    1200000 становится 1,2 млн.

    1200000000 становится 1,2 млрд.

  • naturalday: основанный на диапазоне дат, выдает данную дату в диапазоне (+ 1, 0, -1), это отображает дату как "завтра", "сегодня" и "вчера", соответственно, к примеру, (если сегодня 26 января 2007 г.):

    25 Янв 2007 вчера.

    26 Янв 2007 сегодня

    27 Янв 2007 завтра

  • naturaltime: Возвращает строку, представляющую, сколько секунд, минут или часов назад от даты произошло событие, например, а (если сейчас 26 января, 2007 16:30:00):

    26 Jan 2007 16:30:00 сейчас.

    26 Jan 2007 16:29:31 29 seconds ago.

    26 Jan 2007 16:29:31 29 seconds ago.

    26 Jan 2007 16:25:35 4 минуты назад

    26 Jan 2007 15:30:29 59 минут назад

    26 Jan 2007 15:30:01 59 минут назад

    26 Jan 2007 15:30:00 1 час назад

    26 Jan 2007 13:31:29 2 часа назад

    25 Jan 2007 13:31:29 1 день, 2 часа назад

    25 Jan 2007 13:30:01 1 день, 2 часа назад

    25 Jan 2007 13:30:00 1 день, 3 часа назад

    26 Jan 2007 16:30:30 будет через 30 секунд

    26 Jan 2007 16:30:29 будет через 30 секунд

    26 Jan 2007 16:31:00 будет через 1 минуту

    26 Jan 2007 16:34:35 будет через 4 минуты

    26 Jan 2007 17:30:29 будет через 1 час

    26 Jan 2007 18 : 31:29 будет через 2 часа

    27 Jan 2007 16 : 31:29 будет через 1 день

  • ordinal: Преобразует целое в его порядковую форму, 1 становится "1й", и так далее между после каждых трех разрядов.

Sitemap

Sitemap — это фреймворк для создания карты сайтов, являющихся XML-файлами, которые помогают индексаторам поисковых движков находить динамические страницы на вашем сайте. Он указывает индексатору насколько страница важна и как часто она меняется. Эта информация делает процесс индексирования более точным и эффективным.

Фреймворк sitemaps позволяет выразить предыдущую информацию в коде Python , а затем генерирует XML-документ, который представляет карту вашего сайта. Это охватывает все наиболее часто используемые фреймворки из пакета django contrib. В пакете содержатся дополнительные приложения, которые не так важны, как предыдущие и он время от времени обновляется с новыми приложениями. Для того, чтобы узнать о любом приложения из пакета django contrib, вы можете всегда прочитать его документацию, которая доступна онлайн.

< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Константин Боталов
Константин Боталов

Вроде легкие вопросы и ответы знаю правильные, но система считает иначе и правильные ответысчитает неправильными. Приходится выполнть по несколько раз. Это я не правильно делаю или тест так составлен?

Владимир Филипенко
Владимир Филипенко

Листинг показывает в 4-ой лекции, что установлен Django 1.8.4. Тут же далее в этой лекции указаны настройки, которые воспринимает Django 1.7 и младше.