Gyakorlat – Sablonok létrehozása

Befejeződött

Hozzunk létre két sablont a menedékhelyek listájának és az egyes menedékhelyek részletes oldalának megjelenítéséhez. Emellett létrehozunk egy alapsablont is, amely biztosítja az alkalmazás konzisztenciáját.

Az alapsablon létrehozása

Az alapsablonok minden Django-projekt esetében gyakoriak. Először hozzunk létre egyet.

  1. A Visual Studio Code-ban hozzon létre egy új mappát dog_shelters elnevezett sablonokon belül.

  2. Hozzon létre egy új fájlt a base.html nevű sablonokban.

  3. Adja hozzá a következő HTML-t a base.html fájlhoz:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>{% block title %}Dog shelter site{% endblock %}</title>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
    </head>
    <body>
        <article class="container">
            <section class="jumbotron">
                <h3>Dog shelter application</h3>
            </section>
            {% block content %}
            {% endblock %}    
        </article>
    </body>
    </html>
    

    Megjegyzés:

    A bootstrap 4.6-os verzióját használjuk webhelyünkhöz. Itt azonban nincs szükségünk Bootstrap-ismeretekre. Csak egy osztályt használunk, jumbotron. Ellenkező esetben az alapvető HTML-t használjuk.

Figyelje meg a két {% block %} utasítást, az egyiket a címhez, a másikat pedig a gyermekoldalak által biztosított tartalomhoz. Megadunk egy alapértelmezett értéket title, amely biztosítja, hogy mindig legyen címünk, ha egy gyermeklap nem állítja be.

A menedéklistasablon létrehozása

Most létrehozunk egy másik sablont az összes menedékhely felsorolásához. Végigvezetjük a menedékhelyek listáját, és hivatkozásokat hozunk létre az összes menedékhely részleteire.

  1. A dog_shelters/sablonokban hozzon létre egy shelter_list.html nevű új fájlt.

  2. Adja hozzá a következő kódot a menedéklista sablonjának létrehozásához:

    {% extends 'base.html' %}
    
    {% block title %}
    Shelter list
    {% endblock %}
    
    {% block content %}
    <h2>Shelter list</h2>
    <div>Here is the list of registered shelters</div>
        {% for shelter in shelters %}
            <div>
                <a href="{% url 'shelter_detail' shelter.id %}">
                    {{shelter.name}}
                </a>
            </div>
        {% endfor %}
    </div>
    {% endblock %}
    

A címkékkel block jelezzük, hogy hová szeretnénk helyezni az információinkat. Megadunk egy title értéket Shelter list, és az content elemek lesznek az összes menedék listája.

Új címkét is használunk. url A url címke dinamikusan generál egy URL-címet. Az URL-címeink regisztrálva vannak az URLconfban, így potenciálisan változhatnak. A címke használatával url meg tudjuk mondani Django-nak, hogy a megfelelő URL-címet kérje le az URLconftól ahelyett, hogy az elérési úton történő kemény kódolást használnánk.

A url címke a mi esetünkben az elérési út shelter_detail nevét, majd a várt paraméterek listáját keresi. shelter_detail van egy paramétere, pk. Ez a menedék elsődleges kulcsa vagy azonosítója. Az azonosítót a következővel shelter.idadhatja meg: .

A menedékhely részletes sablonjának létrehozása

A listasablon létrehozásával most már létrehozhatjuk a részletes sablont.

  1. A dog_shelters/sablonokban hozzon létre egy shelter_detail.html nevű új fájlt.

  2. Adja hozzá a következő kódot a sablon létrehozásához:

    {% extends 'base.html' %}
    
    {% block title %}
    Shelter list
    {% endblock %}
    
    {% block content %}
    <h2>{{ shelter.name }}</h2>
    <div>Located in {{ shelter.location }}</div>
    {% if shelter.dog_set.all %}
        <div>Here is the list of available dogs</div>
        {% for dog in shelter.dog_set.all %}
            <div>
                <a href="">
                    {{dog.name}}
                </a>
            </div>
        {% endfor %}
        </div>
    {% else %}
        <div>This shelter has no dogs available for adoption</div>
    {% endif %}
    {% endblock %}
    

Figyelje meg, hogy a testben ellenőrizzük, hogy vannak-e kutyák a menhelyen if shelter.dog_set.all. Ha vannak kutyák, akkor a listát for úgy jelenítjük meg, hogy végighalad az összes kutyán. Ellenkező esetben egy olyan üzenetet jelenítünk meg, amely szerint nincs elérhető kutya. A hivatkozást egy későbbi leckében frissítjük.

Megjegyzés:

Észreveheti, hogy két hívást indítunk.shelter.dog_set.all Ha adatbázisokkal és ORM-ekkel rendelkezik, előfordulhat, hogy két hívást indítunk az adatbázishoz. Két hívás általában teljesítménybeli találat lenne. A Django beépített gyorsítótárazással rendelkezik, amely biztosítja, hogy csak egy hívás legyen az adatbázishoz.

A webhely tesztelése

A sablonjaink létrehozásával működés közben láthatjuk webhelyünket!

  1. Mentse az összes fájlt.

  2. Nyissa meg a böngészőt, és nyissa meg a kívánt elemet http://localhost:8000.

  3. Most meg kell jelennie a menedékhelyek listájának.

    Screenshot of a page that shows a list of two shelters - Contoso and AdventureWorks.

  4. Válassza a Contoso lehetőséget.

  5. Megjelenik a Contoso menedékhely kutyáinak listája.

    Screenshot of page that shows shelter details for Contoso, including the two dogs Sammy and Roscoe.