Tworzenie dynamicznych widoków i szablonów w Django

Django to potężny framework, który ułatwia tworzenie dynamicznych aplikacji internetowych. W tym artykule przyjrzymy się sposobowi tworzenia dynamicznych widoków i szablonów w Django, zaczynając od podstawowych koncepcji do bardziej zaawansowanych technik. Omówimy, jak przekazywać dane z widoków do szablonów i jak używać tagów szablonów do dynamicznego generowania treści na podstawie tych danych.

Czym są widoki w Django?

W Django widok to funkcja Pythona lub komponent oparty na klasie, który przyjmuje żądanie sieciowe i zwraca odpowiedź sieciową. Odpowiedzią może być strona HTML, obiekt JSON lub dowolny inny typ treści. Widoki umożliwiają dynamiczne generowanie treści na podstawie żądania użytkownika.

Tworzenie prostego widoku

Aby utworzyć widok w Django, musisz zdefiniować funkcję w pliku views.py swojej aplikacji Django. Funkcja odbiera żądanie HTTP i zwraca odpowiedź HTTP. Na przykład:

from django.shortcuts import render

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

Ten prosty widok renderuje szablon "home.html". Ale możemy to uczynić bardziej dynamicznym, przekazując dane z widoku do szablonu.

Przekazywanie danych do szablonów

Aby przekazać dane z widoku do szablonu, możesz użyć słownika w argumencie kontekstu podczas wywoływania funkcji renderowania. Na przykład zmodyfikujmy widok "home", aby przekazać dynamiczną wiadomość do szablonu:

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

Teraz w szablonie "home.html" możesz uzyskać dostęp do zmiennej `message`:

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

Wyświetli się komunikat przekazany z widoku: „Witaj na mojej stronie internetowej!”

Używanie znaczników szablonów dla dynamicznej zawartości

Szablony Django obsługują potężne znaczniki szablonów, które pomagają generować dynamiczną zawartość w Twoim HTML. Niektóre typowe znaczniki szablonów to:

  • {% if %}... {% endif %} dla instrukcji warunkowych.
  • {% for %}... {% endfor %} do pętli po danych.
  • {{ zmienna }} do wstawiania wartości dynamicznych do HTML.

Korzystanie z instrukcji If

Dodajmy dynamiczną wiadomość, która pojawia się tylko wtedy, gdy spełniony jest pewien warunek. Zmodyfikuj widok "home", aby przekazać warunek:

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

W szablonie możesz użyć instrukcji if, aby wyświetlić wiadomość powitalną tylko wtedy, gdy użytkownik jest zalogowany:

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

Pętla przez dane

Teraz przekażmy listę elementów do szablonu i wyświetlmy je za pomocą pętli for. Najpierw zmodyfikujmy widok:

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

Teraz w szablonie użyj pętli for, aby wyświetlić każdy element:

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

Spowoduje to wygenerowanie nieuporządkowanej listy elementów: Element 1, Element 2 i Element 3.

Dziedziczenie szablonów dla układów wielokrotnego użytku

Django pozwala na użycie dziedziczenia szablonów w celu utworzenia wspólnego układu, który może być ponownie wykorzystany na wielu stronach. Na przykład utwórzmy szablon bazowy, który zawiera strukturę Twojej strony 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>

Teraz w szablonie "home.html" rozszerz szablon bazowy i zdefiniuj blok treści:

<!-- 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 %}

Po wyrenderowaniu zawartość "home.html" zostanie wstawiona do sekcji {% block content %}{% endblock %} szablonu bazowego.

Wniosek

Dowiedzieliśmy się, jak budować dynamiczne widoki i szablony w Django. Przekazując dane z widoków do szablonów i używając potężnych tagów szablonów Django, możesz tworzyć bogate i interaktywne strony internetowe. Ponadto dziedziczenie szablonów pozwala na ponowne wykorzystanie wspólnych układów w całej aplikacji, dzięki czemu kod jest łatwiejszy w utrzymaniu.

Po zapoznaniu się z tymi koncepcjami możesz zacząć tworzyć bardziej złożone aplikacje Django i w pełni wykorzystać potencjał tego frameworka.