Opbygning af dynamiske visninger og skabeloner i Django

Django er en kraftfuld ramme, der gør det nemt at bygge dynamiske webapplikationer. I denne artikel vil vi undersøge, hvordan man opbygger dynamiske visninger og skabeloner i Django, startende fra grundlæggende koncepter til mere avancerede teknikker. Vi vil dække, hvordan man overfører data fra visninger til skabeloner, og hvordan man bruger skabelontags til dynamisk at generere indhold baseret på disse data.

Hvad er udsigter i Django?

I Django er en visning en Python-funktion eller klassebaseret komponent, der tager en webanmodning og returnerer et websvar. Svaret kan være en HTML-side, et JSON-objekt eller enhver anden type indhold. Visninger giver dig mulighed for dynamisk at generere indhold baseret på brugerens anmodning.

Oprettelse af en simpel visning

For at oprette en visning i Django skal du definere en funktion i views.py-filen i din Django-app. Funktionen modtager en HTTP-anmodning og returnerer et HTTP-svar. For eksempel:

from django.shortcuts import render

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

Denne enkle visning gengiver "home.html" skabelonen. Men vi kan gøre dette mere dynamisk ved at overføre data fra visningen til skabelonen.

Overførsel af data til skabeloner

For at overføre data fra en visning til en skabelon kan du bruge en ordbog i kontekstargumentet, når du kalder gengivelsesfunktionen. Lad os f.eks. ændre "home"-visningen for at sende en dynamisk besked til skabelonen:

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

Nu, i "home.html" skabelonen, kan du få adgang til variabelen `meddelelse`:

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

Dette vil vise meddelelsen sendt fra visningen: "Velkommen til min hjemmeside!"

Brug af skabelontags til dynamisk indhold

Django-skabeloner understøtter kraftfulde skabelontags, der hjælper med at generere dynamisk indhold i din HTML. Nogle almindelige skabelontags er:

  • {% if %}... {% endif %} for betingede udsagn.
  • {% for %}... {% endfor %} til looping over data.
  • {{ variabel }} til at indsætte dynamiske værdier i HTML.

Brug af en hvis-erklæring

Lad os tilføje en dynamisk besked, der kun vises, hvis en bestemt betingelse er sand. Rediger "home"-visningen for at sende en betingelse:

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

I skabelonen kan du bruge en if-erklæring til kun at vise en velkomstbesked, hvis brugeren er logget ind:

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

Gennemgang af data

Lad os nu sende en liste over elementer til skabelonen og vise dem ved hjælp af en for-løkke. Først skal du ændre visningen:

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

Brug nu for-løkken i skabelonen til at vise hvert element:

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

Dette vil gengive en uordnet liste over varer: Vare 1, Vare 2 og Vare 3.

Skabelonarv til genanvendelige layouts

Django giver dig mulighed for at bruge skabelonarv til at skabe et fælles layout, der kan genbruges på tværs af flere sider. Lad os for eksempel oprette en basisskabelon, der indeholder strukturen på din HTML-side:

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

Udvid nu basisskabelonen i din "home.html" skabelon og definer indholdsblokken:

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

Når det gengives, vil "home.html"-indholdet blive indsat i {% block content %}{% endblock %} sektionen af ​​basisskabelonen.

Konklusion

Vi lærte, hvordan man bygger dynamiske visninger og skabeloner i Django. Ved at overføre data fra visninger til skabeloner og bruge Djangos kraftfulde skabelontags, kan du oprette fyldige og interaktive websider. Derudover giver skabelonarv dig mulighed for at genbruge almindelige layouts på tværs af din applikation, hvilket gør din kode mere vedligeholdelsesvenlig.

Med disse koncepter på plads kan du begynde at bygge mere komplekse Django-applikationer og udnytte rammens fulde kraft.