Шаблоны Django

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

Шаблоны Django — это файлы, которые определяют, как должен выглядеть HTML-код страниц веб-приложения. Они используют специальный язык шаблонов, который позволяет вставлять данные из контекста приложения, использовать циклы, условные операторы и другие конструкции.

Вот пример базового шаблона Django:

<!DOCTYPE html>
<html>
<head>
  <title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
  {% block content %}{% endblock %}
</body>
</html>

Этот шаблон определяет базовый HTML-код для страниц веб-приложения. Он включает блоки {% block %}, которые могут быть переопределены в наследующих шаблонах или включаемых шаблонах.

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

{% extends "base.html" %}

{% block title %}My Blog{% endblock %}

{% block content %}
  <h1>My Blog</h1>
  {% for post in posts %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.body }}</p>
  {% endfor %}
{% endblock %}

Этот шаблон наследует базовый шаблон, переопределяет блок title и определяет новый блок `content`, который использует цикл for для вывода списка постов.

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

{% include "login_form.html" %}

Этот код включает шаблон login_form.html в текущий шаблон.

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

Язык шаблонов Django

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

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

Основные конструкции языка шаблонов

Основные конструкции языка шаблонов Django включают следующие:

  1. {{ переменная }} — Это конструкция используется для вывода значения переменной на странице. Внутри двойных фигурных скобок можно указать имя переменной из контекста приложения.
  2. {% тег %} — Это конструкция используется для выполнения различных действий на странице, таких как управление потоком исполнения, установка значений переменных и т.д. Внутри фигурных скобок можно указать имя тега и его аргументы.
  3. {% for элемент in список %} … {% endfor %} — Эта конструкция используется для выполнения цикла. Она позволяет перебрать все элементы в списке и выполнить некоторые действия с каждым из них.
  4. {% if условие %} … {% endif %} — Эта конструкция используется для выполнения условного оператора. Она позволяет выполнить определенные действия только если заданное условие истинно.
  5. {% extends «базовый_шаблон.html» %} — Эта конструкция используется для наследования от другого шаблона. Она позволяет создать новый шаблон, который наследует элементы и стили из базового шаблона.
  6. {% block имя_блока %} … {% endblock %} — Эта конструкция используется для создания блока, который может быть переопределен в наследуемом шаблоне. Она позволяет создавать более гибкие шаблоны, которые можно настраивать под конкретные нужды.
  7. {% url ‘имя_представления’ аргументы_url %} — Эта конструкция используется для создания ссылок на другие страницы в приложении. Она позволяет автоматически создать URL-адрес для заданного представления и передать в него нужные аргументы.
  8. {% include «шаблон.html» %} — Эта конструкция используется для включения содержимого другого шаблона в текущий шаблон. Она позволяет использовать общие элементы интерфейса на нескольких страницах приложения, без необходимости дублировать код.
  9. {{ value|фильтр }} — Эта конструкция используется для применения фильтра к значению переменной, которая выводится на странице. Фильтры позволяют изменять формат, размер и тип выводимого значения.
  10. {% csrf_token %} — Эта конструкция используется для вставки маркера CSRF в форму. Она позволяет защитить приложение от атак, связанных с подделкой межсайтовых запросов.
  11. {% with имя_переменной=значение %} … {% endwith %} — Эта конструкция используется для создания временных переменных в шаблоне. Она позволяет сохранить значение переменной в течение выполнения блока, после чего переменная удаляется.
  12. {% comment «Комментарий» %} — Эта конструкция используется для добавления комментариев в шаблон. Она позволяет оставлять заметки для других разработчиков, не влияя на выводимую на странице информацию.

Использование переменных в шаблоне Django

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

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

def my_view(request):
    context = {
        'name': 'John',
        'age': 25,
        'favorite_colors': ['red', 'green', 'blue']
    }
    return render(request, 'my_template.html', context)

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

<h1>{{ name }}</h1>
<p>Возраст: {{ age }}</p>

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

<ul>
{% for color in favorite_colors %}
    <li>{{ color }}</li>
{% endfor %}
</ul>

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

{% if age >= 18 %}
    <p>Вы совершеннолетний</p>
{% else %}
    <p>Вы несовершеннолетний</p>
{% endif %}

Связь шаблонов и представлений

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

Чтобы связать шаблон с представлением на уровне проекта, нужно в представлении использовать функцию render из модуля django.shortcuts. Функция render принимает три параметра: объект запроса request, имя шаблона и контекст. Например:

from django.shortcuts import render

def my_view(request):
    context = {'message': 'Hello, world!'}
    return render(request, 'my_template.html', context)

Здесь мы передаем в контекст словарь, содержащий переменную `message` со значением Hello, world!, и имя шаблона my_template.html. Функция render найдет файл шаблона my_template.html в директории templates на уровне проекта и подставит в него переменную message.

Если вы хотите связать шаблон с представлением на уровне приложения, то вам нужно создать директорию templates внутри папки вашего приложения и поместить туда файлы шаблонов. Затем в вашем представлении вы можете использовать функцию render с указанием пути к шаблону относительно директории templates вашего приложения. Например:

from django.shortcuts import render

def my_view(request):
    context = {'message': 'Hello, world!'}
    return render(request, 'my_app/my_template.html', context)

Здесь мы передаем в контекст словарь, содержащий переменную message со значением Hello, world!, и имя шаблона my_template.html, расположенного в директории templates на уровне приложения my_app.

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

Задания на закрепление

Задание 1. Создайте веб-страницу-шаблон со списком любимых книг. Список книг должен определяться через контекст представления (view).

Решение

Задание на использование шаблона проекта:

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

<!DOCTYPE html>
<html>
  <head>
    <title>Список любимых книг</title>
  </head>
  <body>
    <h1>Список любимых книг:</h1>
    <ul>
      {% for book in books %}
        <li>{{ book }}</li>
      {% endfor %}
    </ul>
  </body>
</html>

Затем создайте представление books_view в вашем приложении. В данном случае, мы будем использовать функциональное представление:

from django.shortcuts import render

def books_view(request):
    books = ['Война и мир', 'Преступление и наказание', 'Анна Каренина']
    context = {'books': books}
    return render(request, 'books.html', context)

В данном случае, мы создаем список книг в представлении, добавляем его в контекст и передаем его в функцию render вместе с именем шаблона. Когда мы перейдем на страницу books, Django найдет шаблон books.html в директории templates на уровне проекта и подставит переменную books в список.

Задание2. Вам нужно создать веб-страницу, которая будет выводить сообщение приветствия. Используйте отдельное приложение для создания шаблона и представления.

Решение

Создайте шаблон welcome.html в директории templates внутри вашего приложения и добавьте следующий код:

<!DOCTYPE html>
<html>
  <head>
    <title>Добро пожаловать!</title>
  </head>
  <body>
    <h1>{{ message }}</h1>
  </body>
</html>

Затем создайте представление welcome_view в вашем приложении:

from django.shortcuts import render

def welcome_view(request):
    message = 'Добро пожаловать на наш сайт!'
    context = {'message': message}
    return render(request, 'welcome.html', context)

Здесь мы создаем переменную message с сообщением приветствия, добавляем ее в контекст и передаем его в функцию render вместе с именем шаблона. Когда мы перейдем на страницу welcome, Django найдет шаблон welcome.html в директории templates на уровне приложения и подставит переменную message в заголовок H1.

Индивидуальное и групповое обучение «Python Junior»
Если вы хотите научиться программировать на Python, могу помочь. Запишитесь на мой курс «Python Junior» и начните свой путь в мир ИТ уже сегодня!

Контакты
Для получения дополнительной информации и записи на курсы свяжитесь со мной:

Телеграм: https://t.me/Vvkomlev
Email: victor.komlev@mail.ru

Объясняю сложное простыми словами. Даже если вы никогда не работали с ИТ и далеки от программирования, теперь у вас точно все получится! Проверено десятками примеров моих учеников.

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

Практическая направленность. 80%: практики, 20% теории. У меня множество авторских заданий, которые фокусируются на практике. Вы не просто изучаете теорию, а сразу применяете знания в реальных проектах и задачах.

Разнообразие учебных материалов: Теория представлена в виде текстовых уроков с примерами и видео, что делает обучение максимально эффективным и удобным.

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

 

Понравилась статья? Поделиться с друзьями:
Школа Виктора Комлева
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

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