Язык джанго: Cайт на Python — Django уроки создания сайта на Питоне

Содержание

Cайт на Python — Django уроки создания сайта на Питоне

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

Информация про Джанго

Язык Python универсальный и на его основе можно писать приложения для различных целей. Создать сайт на Python вполне возможно, но сайт на питоне гораздо проще создается при использовании Джанго Питон. При помощи дополнительных библиотек можно создавать как приложения, так и веб сайты. К примеру, для создания игр на Python понадобиться библиотека Pygame, а для создания сайтов – Django.

Зачем нужен Джанго?

Писать сайты на Питон на самом деле можно и без использования сторонних библиотек или же фреймворков. В то же время, написание сайта на основе лишь Python – это долгий и сложный процесс. Чтобы облегчить дело были придуман отдельные фреймворки или, другими словами, готовые решения для ускорения процесса построения сайта.

Джанго создан на основе языка Питон. За счёт Django вы можете намного проще и быстрее создавать как легкие, так и сложные веб сайты.

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

Преимущества Джанго

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

В Джанго используется схема MVC. Это схема позволяет удобно разбить файлы на одну из трех категорий: HTML шаблоны, файлы модели для работы с базой данных и файлы контроллеры для связи моделей и HTML шаблонов между собой.

Одна из ключевых особенностей Джанго в том, что вы можете скачать отдельную часть проекта и добавить её в свой проект, просто заменив ссылки на нужные для вас.

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

Сайты на Джанго

На сегодняшний день существует большое количество популярных сайтов, которые созданы именно при помощи этой технологии, среди них:

  1. Google — крупнейший сайт на Django. Является поисковой системой;
  2. YouTube — крупнейший видеохостинг;
  3. Instagram — популярное приложения для обмена фото и видео;
  4. Pinterest — крупнейший социальный интернет-сервис;
  5. The Washington Times — популярная всемирная газета.

Это только небольшой список тех компаний, которые используют эту технологию в своих продуктах. 

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

Какие знания нужны?

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

Помимо Питон вам также нужно уметь работать с языком разметки HTML и языком стилей CSS. Без этих языков вам не удастся написать разметку веб страницы, поэтому перед курсом также стоит изучить HTML и CSS.

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

План курса

За Django курс мы изучим все основные положения фреймворка Django, а также создадим Python сайт. Для реализации стилей на сайте мы будем использовать библиотеку Bootstrap (уроки по ней можно посмотреть здесь), а для связи с базой данных мы будем использовать встроенную ORM систему, которая позволяет создавать таблицы в базе данных на основе классов в Python.

Программа обучения

Также на нашем сайте есть более углубленные Python Django уроки в программе по изучению языка Питон и его библиотек. За программу вы узнаете создание сайта на Python, изучите все моменты как написать сайт на Питоне, разработать на его основе программы под мобильные приложения и многое другое. Ознакомится с программой обучения можно по этой ссылке.

Почему Django — лучший фреймворк для разработки сайтов

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

  • Прошлое и будущее фреймворка Django: краткий экскурс в историю
  • Почему MVT архитектура важна для веб-приложений на Django: разделение и независимое использование уровней
  • Какие задачи можно решать с помощью Django: движки для сайтов, CRM, machine learning
  • Почему Django — отличный фреймворк для веб-разработки: экосистема, SEO, библиотеки
    • Развитая экосистема
    • Зрелость
    • Административная панель
    • SEO-дружественность
    • Расширяемость
    • Библиотеки
    • ORM
  • Недостатки Django: не для маленьких проектов, не всегда предсказуемое поведение
    • Не подходит для небольших проектов
    • Нет поддержки WebSocket по умолчанию
    • Монолитность
    • Непредсказуемость поведения некоторых компонентов
  • Альтернативы Django
  • Заключение: почему стоит выбрать Django

Прошлое и будущее фреймворка Django: краткий экскурс в историю

Django создали разработчики издания Lawrence-Journal World. Этой газете понадобился сайт, чтобы публиковать новости в интернете. Программисты Эдриан Головатый и Саймон Виллисон создали веб-приложение и сделали его публичным.

Вокруг Django быстро сформировалось активное сообщество. Фреймворк стал стремительно развиваться усилиями волонтёров. Значительную роль в успехе Django сыграли несколько известных сайтов, которые использовали этот фреймворк. В их число входят Pinterest, Dropbox, Spotify, сайт The Washington Post. В настоящее время сообщество Django включает более 11 тыс. разработчиков из 166 стран мира.

Эти сайты используют Django

Справка: русскоязычные разработчики и пользователи часто используют такой вариант написания: «Джанго». Будьте готовы к этому, если встретитесь с этим вариантом в обсуждениях или профессиональной переписке. Кстати, у нас есть краткий словарь профессионального сленга программистов.

В Django реализован принцип DRY (don’t repeat yourself). Благодаря этому сокращается время создания сайтов. То есть при использовании Django вам не нужно несколько раз переписывать один и тот же код. Фреймворк позволяет создавать сайт из компонентов. Это можно сравнить со строительством крепости с помощью Lego.

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

Изучайте Python на Хекслете
Стартовые курсы в профессии «Python-программист» можно пройти бесплатно. Среди них курсы «Python: основы», «Системы контроля версий», «Python: настройка окружения» и другие. Регистрируйтесь и начинайте учиться!

Почему MVT архитектура важна для веб-приложений на Django: разделение и независимое использование уровней

Фреймворк Django написан на языке программирования Python, поэтому его структура соответствует особенностям языка. Создатели реализовали в Django паттерн MVC, и он применяется в текущей версии фреймворка.

Архитектура MVC позволяет разработчику работать с визуальным представлением и бизнес-логикой приложения отдельно. Кстати, при работе с Django специалисты чаще используют термин MVT — Model-View-Template или модель-представление-шаблон. Компоненты MVT можно использовать независимо друг от друга.

Схема архитектуры MVT в Django


Документация Django определяет модель (model) как «источник информации о данных, в которых содержатся ключевые поля и поведение данных». Обычно одна модель указывает на одну таблицу в базе данных. Django поддерживает базы данных PostgreSQL, MySQL, SQLite и Oracle.

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

Модель отвечает за бизнес-логику, методы, свойства и другие элементы, связанные с манипуляцией данными. Также модели позволяют разработчикам создавать, читать, обновлять и удалять объекты в базе данных.

Представление (view) решает три задачи: принимает HTTP-запросы, реализует бизнес-логику, определённую методами и свойствами, отправляет HTTP-ответ в ответ на запросы. То есть представление получает данные от модели и предоставляет шаблонам (templates) доступ к этим данным или предварительно обрабатывает данные и затем предоставляет к ним доступ шаблонам.

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

Шаблон страницы


Такая архитектура позволяет Django успешно решать разные задачи, о которых ниже.

Какие задачи можно решать с помощью Django: движки для сайтов, CRM, machine learning

Неопытные специалисты считают Django одной из многих систем управления контентом (CMS). На самом деле это программный инструмент, с помощью которого можно создавать и запускать веб-приложения.

Справка: название фреймворка подчёркивает его многогранность. Он назван в честь известного джазового гитариста Джанго Рейнхардта. Этот музыкант виртуозно играл на гитаре, хотя два пальца на его левой руке не функционировали после травмы, полученной во время пожара. То есть музыканту приходилось брать аккорды тремя пальцами.

Фреймворк Django справляется с большим количеством задач и повышенными нагрузками. Его применяют для создания:

  • CRM-систем.
  • CMS.
  • Коммуникационных платформ.
  • Сервисов бронирования номеров.
  • Платформ управления документооборотом.

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

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

Почему Django — отличный фреймворк для веб-разработки: экосистема, SEO, библиотеки

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

Развитая экосистема

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

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

Зрелость

Django был представлен в 2005 году. За 14 лет существования он сильно изменился и усовершенствовался. В фреймворке постоянно появляются новые возможности, а старые совершенствуются.

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

Административная панель

Административная панель Django автоматически генерируется при создании приложения. Это избавляет разработчика от необходимости создавать админку вручную.

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

SEO-дружественность

Написанный на Python код получается читабельным и понятным даже неподготовленным людям. Это один из факторов, благодаря которым веб-приложения на Python считаются SEO-дружественными. Django генерирует семантические URL. Их также называют человеко-понятными URL или ЧПУ. В приложениях на Django легко реализуются другие функции, необходимые для поисковой оптимизации.

Расширяемость

Функциональность Django расширяется с помощью плагинов. Это программные модули, которые позволяют быстро добавить на сайт нужную функцию. В официальном каталоге есть сотни плагинов, которые позволяют легко реализовать на сайте sitemap.xml, управлять доступами, подключить платёжную систему Stripe и так далее. При необходимости вы можете отключать или заменять плагины, чтобы адаптировать приложение к текущим нуждам проекта.

Библиотеки

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

Django поддерживает использование библиотек при разработке веб-приложений. В число популярных библиотек входят:

  • Django REST Framework, который упрощает работу с API.
  • Django CMS — удобный инструмент для управления контентом.
  • Django-allauth — с его помощью реализуются функции регистрации, авторизации, управления учётными записями.

ORM

В Django реализовано объектно-реляционное отображение (ORM), которое обеспечивает взаимодействие приложения с базами данных (БД). ORM автоматически передаёт данные из БД, например, PostgreeSQL или MySQL, в объекты, которые используются в коде приложения.

Схема работы ORM


ORM ускоряет разработку прототипов и готовых веб-приложений на Django. Разработчику даже не нужно знать язык, который используется для взаимодействия с базами данных.

Также ORM позволяет быстро переключаться между базами данных с минимальными изменениями кода. Например, вы можете использовать SQLite на локальном сервере, а потом переключиться на MySQL на production-сервере. Однако для минимизации ошибок лучше использовать одну базу данных во время разработки и в продакшене.

У Django есть недостатки, как у любого инструмента. Основные недостатки фреймворка перечислены ниже.

Не подходит для небольших проектов

Возможности Django могут быть избыточными для небольшого проекта. Однако в экосистеме Python есть другие фреймворки, которые можно использовать в таких случаях. Например, если вы хотите сделать простой чат, лучше использовать Flask.

Нет поддержки WebSocket по умолчанию

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

Монолитность

Некоторые модули Django, например, ORM или формы, сложно заменить. Разработчикам приходится тратить много времени, чтобы изменить внутреннюю структуру фреймворка и использовать альтернативные инструменты.

Непредсказуемость поведения некоторых компонентов

Поведением некоторых компонентов Django не всегда просто управлять. Например, к таким компонентам относится административная консоль. Если вы захотите добавить что-то, что не входит в экосистему Django, это может потребовать серьёзных усилий и много времени.

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

Альтернативы Django

Фреймворки ускоряют разработку веб-приложений. И в экосистеме Python есть несколько фреймворков, которые можно рассматривать в качестве альтернативы Django. В их число входят Pyramid, Flask и Tornado. Все три инструмента подходят для работы как с масштабными проектами, так и с небольшими приложениями.

Также в качестве альтернативы можно рассматривать PHP-фреймворки, например, Laravel, Symphony или CakePHP. Например, Laravel подходит для работы с масштабными и маленькими проектами, и в этом фреймворке есть мощный движок шаблонов.

Если для вашего проекта критически важна безопасность, Laravel можно считать инструментом первого выбора. В нём реализованы мощные инструменты шифрования. Этот PHP-фреймворк работает с базами данных MySQL, PostgreSQL, SQL Server, SQ Lite.

Ещё одна достойная альтернатива — фреймворк Ruby on Rails. Этот инструмент ускоряет создание веб-приложений и позволяет разработчикам сфокусироваться скорее на бизнес-логике, чем на коде. Кстати, наш сайт создан на Ruby on Rails.

Смотрите также: стрим с Кириллом Мокевниным «Создание сайта на Rails с нуля».

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

Заключение: почему стоит выбрать Django

Разработчики выбирают Django благодаря таким характеристикам:

  • Разделение бизнес-логики и визуальной части на уровне архитектуры.
  • SEO-дружественность.
  • Расширяемость.
  • Развитая инфраструктура: большое количество библиотек и плагинов.
  • Многочисленное и дружественное сообщество, благодаря которому легко искать ответы на сложные вопросы.

Если хотите поделиться опытом работы с Django, пишите в комментариях.

Адаптированный перевод статьи Why Django is the best web framework for your project by Ekaterina Zublenko and Angela Beklemysheva. Мнение авторов может не совпадать с мнением администрации «Хекслета».

Никогда не останавливайтесь:
В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях

Интернационализация и локализация | Документация Django

Обзор

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

Django полностью поддерживает перевод текста, форматирование дат, времени и чисел, а также часовых поясов.

По сути, Django делает две вещи:

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

Перевод зависит от целевого языка, а форматирование обычно зависит от
целевая страна. Эта информация предоставляется браузерами в
Заголовок Accept-Language . Однако часовой пояс недоступен.

Определения

Слова «интернационализация» и «локализация» часто вызывают путаницу;
вот упрощенное определение:

интернационализация
Подготовка программного обеспечения к локализации. Обычно это делают разработчики.
локализация
Написание переводов и локальных форматов. Обычно это делают переводчики.

Дополнительную информацию можно найти в часто задаваемых вопросах W3C по интернационализации веб-сайтов, в статье Википедии или в документации GNU gettext.

Предупреждение

Перевод и форматирование контролируются USE_I18N и
USE_L10N настройки соответственно. Однако обе функции предполагают
интернационализация и локализация. Названия настроек являются
неудачный результат истории Джанго.

Вот некоторые другие термины, которые помогут нам обращаться с общим языком:
комбинированная спецификация языка и страны в форме ll_CC .
Примеры: это , de_AT , es , pt_BR , sr_Latn . Язык
часть всегда в нижнем регистре. Часть страны находится в заглавном регистре, если она
более 2 символов, иначе в верхнем регистре. Сепаратор — это
подчеркивать.

код языка
Представляет название языка. Браузеры отправляют имена
языки, которые они принимают в HTTP-заголовке Accept-Language , используя этот
формат. Примеры: it , de-at , es , пт-бр . Коды языков
обычно представлены строчными буквами, но HTTP Accept-Language
заголовок нечувствителен к регистру. Разделитель — тире.
файл сообщения
Файл сообщения представляет собой простой текстовый файл, представляющий один язык,
который содержит все доступные строки перевода и то, как они должны быть представлены в данном
язык. Файлы сообщений имеют расширение .po .
строка перевода
Литерал, который можно перевести.
файл формата
Файл формата — это модуль Python, который определяет форматы данных для данного
локаль.

Язык шаблонов Django | Документация Django

В этом документе объясняется синтаксис языка системы шаблонов Django. Если
вы ищете более технический взгляд на то, как это работает и как
расширить его, см. Язык шаблонов Django: для программистов Python.

Язык шаблонов Django предназначен для достижения баланса между мощностью и
простота. Он разработан, чтобы чувствовать себя комфортно для тех, кто привык работать с HTML. Если
вы знакомы с другими текстовыми языками шаблонов, такими как Smarty
или Jinja2, вы должны чувствовать себя как дома с шаблонами Django.

Философия

Если у вас есть опыт программирования или вы привыкли к языкам
которые смешивают программный код непосредственно с HTML, вы захотите
Имейте в виду, что система шаблонов Django — это не просто Python, встроенный в
HTML. Так задумано: система шаблонов предназначена для выражения
представления, а не логики программы.

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

Шаблоны

Шаблон представляет собой текстовый файл. Он может генерировать любой текстовый формат (HTML, XML,
CSV и др.).

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

Ниже приведен минимальный шаблон, иллюстрирующий несколько основ. Каждый элемент будет
объясняется далее в этом документе.

 {% расширяет "base_generic.html" %}
{% title блока %}{{ section.title }}{% endblock %}
{% заблокировать содержимое %}

{{ section.title }}

{% для истории в story_list %}

{{ история.заголовок|верхний }}

{{ story.tease|truncatewords:"100" }}

{% конец для %} {% конечный блок%}

Философия

Зачем использовать текстовый шаблон вместо шаблона на основе XML (например, Zope’s
ТАЛ)? Мы хотели, чтобы язык шаблонов Django можно было использовать более
только шаблоны XML/HTML. Вы можете использовать язык шаблона для любого
текстовом формате, таком как электронная почта, JavaScript и CSV.

Переменные

Переменные выглядят следующим образом: {{ переменная }} . Когда механизм шаблонов
встречает переменную, он оценивает эту переменную и заменяет ее на
результат. Имена переменных состоят из любой комбинации буквенно-цифровых символов.
и подчеркивание ( "_" ), но не может начинаться с подчеркивания и не может
быть числом. Точка ( "." ) также появляется в переменных разделах, хотя это
имеет особое значение, как указано ниже. Важно, у вас не может быть пробелов
или знаки препинания в именах переменных.

Используйте точку ( . ) для доступа к атрибутам переменной.

За кулисами

Технически, когда система шаблонов встречает точку, она пытается
следующие поиски, в этом порядке:

  • Поиск в словаре
  • Поиск атрибута или метода
  • Поиск числового индекса

Если результирующее значение можно вызывать, оно вызывается без аргументов.
результат вызова становится значением шаблона.

Этот порядок поиска может привести к неожиданному поведению объектов, которые
переопределить поиск по словарю. Например, рассмотрим следующий фрагмент кода
который пытается перебрать collections.defaultdict :

 {% for k, v in defaultdict.items %}
    Сделайте что-нибудь с k и v здесь...
{% конец для %}
 

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

В приведенном выше примере {{ section.title }} будет заменен на
заголовок атрибут объекта раздела .

Если вы используете несуществующую переменную, система шаблонов вставит
значение string_if_invalid , для которого установлено значение '' (пустой
строка) по умолчанию.

Обратите внимание, что «bar» в выражении шаблона, таком как {{ foo.bar }} , будет
интерпретируется как литеральная строка и не использует значение переменной «bar»,
если он существует в контексте шаблона.

Атрибуты переменных, начинающиеся с символа подчеркивания, не могут быть доступны как
они обычно считаются частными.

Фильтры

Вы можете изменять переменные для отображения с помощью фильтров .

Фильтры выглядят так: {{ name|lower }} . Это отображает значение параметра
{{ name }} переменная после фильтрации через нижний
фильтр, преобразующий текст в нижний регистр. Используйте трубу ( | ), чтобы применить фильтр.

Фильтры можно объединять в цепочки. Выход одного фильтра применяется к следующему.
{{ text|escape|linebreaks }} — распространенная идиома для экранирования текстового содержимого,
затем преобразование разрывов строк в

теги.

Некоторые фильтры принимают аргументы. Аргумент фильтра выглядит так: {{
био|truncatewords:30 }}
. Это отобразит первые 30 слов bio .
переменная.

Аргументы фильтра, содержащие пробелы, должны быть заключены в кавычки; например, присоединиться к
список с запятыми и пробелами, которые вы бы использовали {{ list|join:", " }} .

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

по умолчанию

Если переменная ложна или пуста, используйте данное значение по умолчанию. В противном случае используйте
значение переменной. Например:

 {{ значение|по умолчанию: "ничего" }}
 

Если значение не указано или пусто, будет отображаться вышеприведенное
« ничего ».

длина

Возвращает длину значения. Это работает как для строк, так и для списков.
Например:

 {{значение|длина}}
 

Если значение равно ['a', 'b', 'c', 'd'] , вывод будет 4 .

pngformat

Форматирует значение как «удобочитаемый» размер файла (например, '13 КБ' ,
«4,1 МБ» , «102 байта» и т. д.). Например:

 {{ значение | размер файла }}
 

Если значение равно 123456789, вывод будет 117,7 МБ .

Опять же, это всего лишь несколько примеров; полный список см. в справочнике по встроенным фильтрам.

Вы также можете создавать свои собственные шаблоны фильтров; видеть
Как создавать собственные теги шаблонов и фильтры.

См. также

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

Теги

Теги выглядят так: {% tag %} . Теги более сложны, чем переменные: Некоторые
создать текст на выходе, некоторое управление потоком, выполняя циклы или логику, и
некоторые загружают в шаблон внешнюю информацию, которая будет использоваться последующими переменными.

Для некоторых тегов требуются начальный и конечный теги (например, {% тег %} ... содержимое тега
... {% endtag %}
).

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

for

Перебрать каждый элемент в массиве. Например, для отображения списка спортсменов
предоставлено в спортсмен_список :

 <ул>
{% для спортсмена в спортсмене_списке %}
    
  • {{ спортсмен.имя }}
  • {% конец для %}
    if , elif и else

    Вычисляет переменную, и если эта переменная «истинна», содержимое
    отображается блок:

     {%, если спортсмен_список %}
        Количество спортсменов: {{ спортсмен_список|длина }}
    {% элитный спортсмен_in_locker_room_list %}
        Скоро спортсмены должны выйти из раздевалки!
    {% еще %}
        Никаких спортсменов. 
    {% конец%}
     

    В приведенном выше примере, если спортсмен_список не пуст, количество спортсменов
    будет отображаться переменной {{ спортсмен_список|длина }} . В противном случае,
    если спортсмен_в_локере_комнаты_список не пуст, сообщение «Спортсмены
    должно отсутствовать…» будет отображаться. Если оба списка пусты,
    «Спортсменов нет». будет отображаться.

    Вы также можете использовать фильтры и различные операторы в теге if :

     {%, если спортсмен_список|длина > 1 %}
       Команда: {% для спортсмена в спортсмене_списке %} ... {% endfor %}
    {% еще %}
       Спортсмен: {{спортсмен_список.0.имя}}
    {% конец%}
     

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

    блок и расширения
    Настройка наследования шаблонов (см. ниже), мощный способ
    сокращения «шаблона» в шаблонах.

    Опять же, это только часть всего списка; посмотреть встроенный
    ссылка на тег для полного списка.

    Вы также можете создавать собственные теги шаблонов; видеть
    Как создавать собственные теги шаблонов и фильтры.

    См. также

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

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

    Самая мощная и, следовательно, самая сложная часть шаблона Django.
    движок — это наследование шаблонов. Наследование шаблонов позволяет построить базу
    «скелетный» шаблон, который содержит все общие элементы вашего сайта и
    определяет блокирует , которые дочерние шаблоны могут переопределять.

    Давайте рассмотрим наследование шаблонов, начав с примера:

     
    
    <голова>
         css">
        {% block title %}Мой замечательный сайт{% endblock %}
    
    <тело>
        <дел>
            {% заблокировать боковую панель %}
            <ул>
                
  • Главная
  • Блог
  • {% конечный блок%}
    <дел> {% block content %}{% endblock %}

    Этот шаблон, который мы назовем base.html , определяет скелет HTML
    документ, который можно использовать для страницы с двумя столбцами. Это работа «ребенка».
    шаблоны для заполнения пустых блоков содержимым.

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

    Дочерний шаблон может выглядеть так:

     {% расширяет "base.html" %}
    {% block title %}Мой замечательный блог{% endblock %}
    {% заблокировать содержимое %}
    {% для записи в blog_entries %}
        

    {{ запись.

    название }}

    {{ entry.body }}

    {% конец для %} {% конечный блок%}

    Ключевым здесь является тег extends . Он сообщает обработчику шаблонов, что
    этот шаблон «расширяет» другой шаблон. Когда система шаблонов оценивает
    этого шаблона, сначала он находит родителя — в данном случае «base.html».

    В этот момент механизм шаблонов заметит три блок теги
    в base.html и замените эти блоки содержимым дочернего
    шаблон. В зависимости от значения blog_entries вывод может выглядеть
    например:

     
    
    <голова>
        
        Мой замечательный блог
    
    <тело>
        <дел>
            <ул>
                
  • Главная
  • Блог
  • <дел>

    Введите один

    Это моя первая запись.

    Запись вторая

    Это моя вторая запись.

    Обратите внимание, что поскольку в дочернем шаблоне не определен блок боковой панели ,
    вместо этого используется значение из родительского шаблона. Контент внутри блока {% block %}
    тег в родительском шаблоне всегда используется как запасной.

    Вы можете использовать любое количество уровней наследования. Один из распространенных способов использования
    Наследование представляет собой следующий трехуровневый подход:

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

    Вот несколько советов по работе с наследованием:

    Наконец, обратите внимание, что вы не можете определить несколько тегов блока с одним и тем же
    имя в том же шаблоне. Это ограничение существует, потому что блочный тег работает в
    «оба» направления. То есть блочный тег не просто заполняет дыру —
    он также определяет содержимое, которое заполняет дыру в родительском элементе . Если бы были
    два тега блока с одинаковыми именами в шаблоне, родительском для этого шаблона
    не будет знать, какой из блоков контента использовать.

    Автоматическое экранирование HTML

    При создании HTML из шаблонов всегда существует риск того, что переменная
    включать символы, влияющие на результирующий HTML. Например, рассмотрим это
    фрагмент шаблона:

     Здравствуйте, {{ name }}
     

    На первый взгляд это кажется безобидным способом отображения имени пользователя, но учтите
    что произойдет, если пользователь введет свое имя следующим образом:

     
     

    С этим значением имени шаблон будет отображаться как:

     Здравствуйте, 
     

    …что означает, что в браузере появится всплывающее окно с предупреждением JavaScript!

    Аналогично, что, если бы имя содержало символ '<' , как здесь?

     имя пользователя
     

    В результате будет отображаться такой шаблон:

     Здравствуйте, username
     

    … что, в свою очередь, привело бы к выделению остальной части веб-страницы жирным шрифтом!

    Очевидно, что данные, отправленные пользователем, не должны слепо доверяться и вставляться напрямую
    на ваши веб-страницы, потому что злоумышленник может использовать такую ​​дыру, чтобы
    делать потенциально плохие вещи. Этот тип эксплойта безопасности называется
    Атака межсайтового скриптинга (XSS).

    Чтобы избежать этой проблемы, у вас есть два варианта:

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

    Еще раз подчеркнем, что это поведение включено по умолчанию. Если вы используете Django
    система шаблонов, вы защищены.

    Как отключить

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

    Почему вы хотите его отключить? Потому что иногда переменные шаблона
    содержат данные, которые вы намерены отображать как необработанный HTML, и в этом случае вы
    не хочу, чтобы их содержимое было скрыто. Например, вы можете хранить большой двоичный объект
    HTML в вашей базе данных и хотите встроить его непосредственно в свой шаблон. Или,
    возможно, вы используете систему шаблонов Django для создания текста , а не HTML.
    – например, сообщение электронной почты.

    Для отдельных переменных

    Чтобы отключить автоматическое экранирование для отдельной переменной, используйте безопасный
    filter:

     Это будет экранировано: {{ data }}
    Это не будет экранировано: {{ data|safe }}
     

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

     Это будет экранировано: <b>
    Это не будет экранировано: 
     
    Для блоков шаблонов

    Чтобы управлять автоматическим экранированием шаблона, оберните шаблон (или определенный
    раздел шаблона) в теге autoescape , например:

     {% autoescape off %}
        Привет {{имя}}
    {% endautoescape%}
     

    Тег autoescape принимает либо на , либо на в качестве аргумента. В
    раз, вы можете захотеть принудительно экранировать, когда в противном случае это было бы
    отключен. Вот пример шаблона:

     Автоматическое экранирование включено по умолчанию. Привет {{имя}}
    {% автоэкран выключен %}
        Это не будет автоматически экранировано: {{ data }}.
        Ни это: {{ other_data }}
        {% автоэкранирование на %}
            Снова применяется автоматическое экранирование: {{ name }}
        {% endautoescape%}
    {% endautoescape%}
     

    Тег автоматического экранирования передает свое действие шаблонам, которые расширяют
    текущий, а также шаблоны, включенные с помощью тега , включают ,
    как и все блочные теги. Например:

    base.html

     {% автоэкран выключен %}
    

    {% заголовок блока %}{% конец блока %}

    {% заблокировать содержимое %} {% конечный блок%} {% endautoescape%}

    child.html

     {% расширяет "base.html" %}
    {% block title %}Это & что {% endblock %}
    {% block content %}{{ приветствие }}{% endblock %}
     

    Поскольку автоматическое экранирование отключено в базовом шаблоне, оно также будет
    отключен в дочернем шаблоне, в результате чего отображается следующее
    HTML при приветствии содержит строку Hello! :

     

    Это & что

    Здравствуйте!

    Примечания

    Как правило, авторам шаблонов не нужно особо беспокоиться об автоматическом экранировании.
    Разработчики на стороне Python (люди, пишущие представления и пользовательские фильтры) должны
    подумайте о случаях, когда данные не следует экранировать, и отметьте данные
    соответственно, так что вещи просто работают в шаблоне.

    Если вы создаете шаблон, который может использоваться в ситуациях, когда вы
    не уверен, включено ли автоматическое экранирование, затем добавьте побег фильтр
    к любой переменной, которая нуждается в экранировании. Когда автоматическое экранирование включено, нет
    опасность экранирования фильтра двойного экранирования данных –
    Фильтр escape не влияет на переменные с автоматическим экранированием.

    Строковые литералы и автоматическое экранирование

    Как мы упоминали ранее, аргументы фильтра могут быть строками:

     {{ data|default:"Это строковый литерал." }}
     

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

    Это означает, что вы должны написать

     {{ data|default:"3 < 2" }}
     

    … вместо:

     {{ данные|по умолчанию: "3 < 2" }} {# Плохо! Не делай этого. #}
     

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

    Доступ к вызовам методов

    Большинство вызовов методов, прикрепленных к объектам, также доступны из шаблонов.
    Это означает, что шаблоны имеют доступ не только к атрибутам класса.
    (например, имена полей) и переменные, переданные из представлений. Например, Джанго.
    ORM предоставляет синтаксис «entry_set» для
    поиск набора объектов, связанных по внешнему ключу. Следовательно, учитывая
    модель, называемая «комментарий», с отношением внешнего ключа к модели, называемой
    «задача», вы можете просмотреть все комментарии, прикрепленные к заданной задаче, следующим образом:

     {% для комментария в task. comment_set.all %}
        {{комментарий}}
    {% конец для %}
     

    Аналогично, QuerySets предоставляет метод count()
    для подсчета количества объектов, которые они содержат. Таким образом, вы можете получить счет
    всех комментариев, связанных с текущей задачей:

     {{ task.comment_set.all.count }}
     

    Вы также можете получить доступ к методам, которые вы явно определили в своих моделях:

    models.py

     class Task(models.Model):
        деф фу(я):
            вернуть "бар"
     

    template.html

     {{ task.foo }}
     

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

    Библиотеки пользовательских тегов и фильтров

    Некоторые приложения предоставляют библиотеки пользовательских тегов и фильтров. Чтобы получить к ним доступ в
    шаблон, убедитесь, что приложение находится в INSTALLED_APPS (мы бы добавили
    'django.contrib.humanize' для этого примера), а затем используйте load
    тег в шаблоне:

     {% load humanize %}
    {{ 45000|запятая}}
     

    В приведенном выше примере тег load загружает библиотеку тегов humanize , которая затем
    делает фильтр intcomma доступным для использования. Если вы включили
    django.contrib.admindocs , вы можете обратиться к области документации в вашем
    admin, чтобы найти список пользовательских библиотек в вашей установке.

    Тег load может содержать несколько имен библиотек, разделенных пробелами.
    Пример:

     {% загрузки гуманизировать i18n %}
     

    См. Как создавать пользовательские теги шаблонов и фильтры для получения информации о написании собственных пользовательских тегов.
    библиотеки шаблонов.

    Пользовательские библиотеки и наследование шаблонов

    При загрузке пользовательской библиотеки тегов или фильтров теги/фильтры создаются только
    доступны для текущего шаблона, а не для родительских или дочерних шаблонов.

    This entry was posted in Продвижение