Створення динамічних представлень і шаблонів у Django

Django — це потужний фреймворк, який дозволяє легко створювати динамічні веб-додатки. У цій статті ми розглянемо, як створювати динамічні представлення та шаблони в Django, починаючи від базових концепцій до більш просунутих технік. Ми розглянемо, як передавати дані з представлень у шаблони та як використовувати теги шаблонів для динамічного створення вмісту на основі цих даних.

Що таке перегляди в Django?

У Django представлення — це функція Python або компонент на основі класу, який приймає веб-запит і повертає веб-відповідь. Відповіддю може бути HTML-сторінка, об’єкт JSON або будь-який інший тип вмісту. Перегляди дозволяють динамічно генерувати контент на основі запиту користувача.

Створення простого перегляду

Щоб створити представлення в Django, вам потрібно визначити функцію у файлі views.py вашої програми Django. Функція отримує HTTP-запит і повертає HTTP-відповідь. Наприклад:

from django.shortcuts import render

def home(request):
    return render(request, 'home.html')

Це просте подання відображає шаблон "home.html". Але ми можемо зробити це більш динамічним, передаючи дані з подання в шаблон.

Передача даних у шаблони

Щоб передати дані з подання до шаблону, ви можете використовувати словник у контекстному аргументі під час виклику функції рендерингу. Наприклад, давайте змінимо представлення "home", щоб передати динамічне повідомлення в шаблон:

def home(request):
    context = {
        'message': 'Welcome to my website!'
    }
    return render(request, 'home.html', context)

Тепер у шаблоні "home.html" ви можете отримати доступ до змінної `message`:

<h1>{{ message }}</h1>

Це відобразить повідомлення, передане з перегляду: "Ласкаво просимо на мій веб-сайт!"

Використання тегів шаблону для динамічного вмісту

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

  • {% if %}... {% endif %} для умовних операторів.
  • {% for %}... {% endfor %} для циклічного перегляду даних.
  • {{ змінна }} для вставки динамічних значень у HTML.

Використання оператора If

Давайте додамо динамічне повідомлення, яке з’являється, лише якщо виконується певна умова. Змініть представлення "home", щоб передати умову:

def home(request):
    context = {
        'message': 'Welcome to my website!',
        'user_logged_in': True
    }
    return render(request, 'home.html', context)

У шаблоні ви можете використовувати оператор if для відображення вітального повідомлення, лише якщо користувач увійшов у систему:

{% if user_logged_in %}
    <p>You are logged in!</p>
{% else %}
    <p>Please log in to access more features.</p>
{% endif %}

Перегляд даних у циклі

Тепер давайте передамо список елементів у шаблон і відобразимо їх за допомогою циклу for. Спочатку змініть вигляд:

def home(request):
    context = {
        'message': 'Welcome to my website!',
        'items': ['Item 1', 'Item 2', 'Item 3']
    }
    return render(request, 'home.html', context)

Тепер у шаблоні використовуйте цикл for, щоб відобразити кожен елемент:

<ul>
{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}
</ul>

Буде відображено невпорядкований список елементів: елемент 1, елемент 2 і елемент 3.

Успадкування шаблонів для багаторазових макетів

Django дозволяє використовувати успадкування шаблонів для створення спільного макета, який можна повторно використовувати на кількох сторінках. Наприклад, давайте створимо базовий шаблон, який містить структуру вашої сторінки HTML:

<!-- base.html -->
<html>
    <head>
        <title>My Website</title>
    </head>
    <body>
        <header>
            <h1>My Website</h1>
        </header>
        
        <main>
            {% block content %}{% endblock %}
        </main>

        <footer>
            <p>Footer content here</p>
        </footer>
    </body>
</html>

Тепер у вашому шаблоні "home.html" розширте базовий шаблон і визначте блок вмісту:

<!-- home.html -->
{% extends 'base.html' %}

{% block content %}
    <h2>Welcome to the Home Page</h2>
    <p>This is the dynamic content of the home page.</p>
{% endblock %}

Під час відтворення вміст "home.html" буде вставлено в розділ {% block content %}{% endblock %} базового шаблону.

Висновок

Ми навчилися створювати динамічні представлення та шаблони в Django. Передаючи дані з представлень до шаблонів і використовуючи потужні теги шаблонів Django, ви можете створювати насичені та інтерактивні веб-сторінки. Крім того, успадкування шаблонів дозволяє повторно використовувати загальні макети у вашій програмі, що робить ваш код більш зручним для обслуговування.

З цими концепціями ви можете почати створювати складніші програми Django та використовувати всю потужність фреймворку.