[PYTHON] Erstellen Sie eine Shogi-Score-Management-Anwendung mit Django 5 ~ DB-Daten an Vorlage übergeben ~

Einführung

Dies ist ** 5th **, ein Memorandum zur Erstellung einer Shogi Score Management App mit Django.

Arbeitsumgebung

Die Arbeitsumgebung ist diesmal wie folgt

Außerdem sieht die Verzeichnisstruktur von Django folgendermaßen aus:

- kifu_app_project/
    - kifu_app_project/
        - __init__.py
        - setting.py
        - urls.py
        - wsgi.py
    - kifu_app/
        - migrations/
        - templates/
            - index.html
        - __init__.py
        - admin.py
        - apps.py
        - models.py
        - tests.py
        - urls.py
        - views.py
    - manage.py
    - .gitignore

Inhalt dieses Artikels

--Lesen Sie Daten aus der Datenbank, um die Liste mit Vorlage anzuzeigen und anzuzeigen

Erstellen eines Listenbildschirms

Lassen Sie uns zunächst einige Daten in der Datenbank registrieren.

Nehmen Sie dann die Daten mit Ansicht heraus und zeigen Sie sie mit Vorlage an. Hier werden Daten aus der Informationstabelle abgerufen und in einer Liste angezeigt.

URL erstellen

Erstellen Sie eine neue informationList URL in urls.py.

kifu_app/urls.py


from django.urls import path

from . import views

app_name = 'kifu_app'

urlpatterns = [
    path('', views.index, name='index'),
    path('informationList', views.informationList, name='informationList'),  #hinzufügen
]

Daten mit View abrufen

Ändern Sie views.py wie folgt und fügen Sie die informationList-Methode hinzu.

views.py


from django.shortcuts import render
from .models import Information         #hinzufügen(Ermöglicht die Arbeit mit der Informationstabelle)

#~ Ausgelassen ~

def informationList(request):
    data = Information.objects.all()
    return render(request, 'informationList.html', {'data': data})

Der wichtige Teil ist "Information.objects.all ()". In diesem Teil werden Daten aus der Informationstabelle abgerufen. Hier werden alle Daten mit der Methode all abgerufen.

Sie können auch diejenigen auswählen und sortieren, die Ihren spezifischen Kriterien entsprechen, indem Sie die richtige Methode auswählen. Die folgenden Personen haben es zusammengefasst, daher denke ich, dass es hilfreich sein wird. [Zusammenfassung der Django-Datenbankoperationen] 1

Zeigen Sie die empfangenen Daten als Vorlage an

Als Nächstes erstellen wir die Datei informationList.html und zeigen die Daten an, die vorerst von View übergeben wurden.

informationList.html


<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Kifu APP</title>
    </head>
    <body>
        <h3>{{ data }}</h3>
    </body>
</html>

Dann sehen Sie ungefähr Folgendes auf dem Bildschirm. informationList1

Zeigen Sie die empfangenen Daten einzeln in der Vorlage an

Als nächstes drehen wir die Daten mit for und extrahieren sie nacheinander.

informationList.html


    <body>
        {% for each_data in data %}
        <h3>{{ each_data }}</h3>
        {% endfor %}
    </body>
informationList2.png Damit habe ich das Gefühl, dass ich nur das Datum und die Uhrzeit des Spiels abrufen kann. Dies liegt jedoch daran, dass beim Hinzufügen der Methode \ _ \ _ str__ zur Information-Klasse von models.py in Teil 3 self.date zurückgegeben wurde, und ich denke, dass es tatsächlich gut ist, sie als Objekt zu erkennen.

Daten für einzelne Spalten anzeigen

Rufen wir also die einzelnen Daten ab, die im Objekt enthalten sind.

Um auf einzelne Daten zuzugreifen, verbinden Sie die in models.py definierten Spaltenvariablen mit dem Operator.

informationList.html


    <body>
        {% for each_data in data %}
            <h3>{{ each_data }}</h3>
            <table border="1">
                <tr>
                    <td>{{ each_data.date }}</td>
                    <td>{{ each_data.sente }}</td>
                    <td>{{ each_data.gote }}</td>
                    <td>{{ each_data.small_class }}</td>
                </tr>
            </table>
        {% endfor %}
    </body>
informationList3.png

Ich konnte die einzelnen Daten richtig anzeigen!

Ermöglicht den Übergang von einzelnen Daten zum Detailbildschirm

Als Nächstes können Sie vom Listenbildschirm aus zu jeder Detailseite wechseln.

Ich möchte Informationen von der Vorlage an die Ansicht übergeben

Es ist nicht praktisch, für jede Daten eine HTML-Datei zu erstellen, wenn Sie versuchen, eine Detailseite zu erstellen. Es ist üblich, eine Vorlage für den Detailbildschirm vorzubereiten und den angezeigten Wert entsprechend den ausgewählten Daten zu ändern.

Zu diesem Zeitpunkt müssen Sie ** Informationen darüber, welche Daten aus der Vorlage (Listenbildschirm) ausgewählt wurden, an View ** senden. Ohne dies würde die Ansicht nicht wissen, welche detaillierten Daten an die Vorlage übergeben werden sollen (Detailbildschirm).

Es ist üblich, die Informationen in die URL einzufügen. Nehmen wir zum Beispiel die ID der Daten in die URL ein. Wenn die URL "/ informationDetail / 2" lautet, können Sie anhand der Ansicht beurteilen, dass Sie die Daten mit der ID = 2 abrufen sollten.

Lassen Sie uns nun eine solche Funktion implementieren.

URL erstellen

Erstellen Sie zunächst eine URL. Im Gegensatz zu zuvor ist der Teil, in dem die ID platziert wird, kein fester Wert, sondern ein variabler Wert. Schreiben Sie ihn daher auf akzeptable Weise. Insbesondere ist es wie folgt.

kifu_app/urls.py


urlpatterns = [
    path('', views.index, name='index'),
    path('informationList', views.informationList, name='informationList'),
    path('informationDetail/<int:information_id>', views.informationDetail, name='informationDetail'),
]

Der Teil, für den Sie einen Variablenwert erstellen möchten, ist in Ordnung, wenn Sie die URL in Form von "<Typ: Variablenname>" beschreiben. (Sehr leicht!)

Erhalten Sie die in der Liste in Ansicht ausgewählte ID

Dann sieht die Ansicht wie folgt aus.

views.py


from django.shortcuts import render
from .models import Information
from django.shortcuts import get_object_or_404      #hinzufügen

#~ Ausgelassen ~

def informationDetail(request, information_id):
    detail = get_object_or_404(Information, pk=information_id)
    return render(request, 'informationDetail.html', {'detail': detail})

Da der Variablenname in der URL-Einstellung zuvor auf "information_id" gesetzt wurde, fügen Sie dem Argument der aufzurufenden Methode "information_id" hinzu. Bitte beachten Sie, dass ein Fehler auftritt, wenn sich dieser Variablenname von dem in der URL angegebenen unterscheidet.

Es gibt auch eine neue Methode namens "get_object_or_404"

    try:
        detail = Information.objects.get(pk=information_id)
    except Information.DoesNotExist:
        raise Http404("Information does not exist")

Es ist in Ordnung, wenn Sie erkennen, dass die Arbeit von in einer Zeile geschrieben ist.

Erstellen Sie eine Vorlage für den Detailbildschirm

Gehen Sie einfach wie folgt vor:

informationDetail.html


<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Kifu APP</title>
    </head>
    <body>
        <h3>{{ detail }}</h3>
        <table border="1">
            <tr>
                <td>{{ detail.id }}</td>
                <td>{{ detail.date }}</td>
                <td>{{ detail.sente }}</td>
                <td>{{ detail.gote }}</td>
                <td>{{ detail.result }}</td>
                <td>{{ detail.my_result }}</td>
                <td>{{ detail.small_class }}</td>
                <td>{{ detail.created_at }}</td>
                <td>{{ detail.updated_at }}</td>
            </tr>
        </table>
    </body>
</html>

Erstellen Sie einen Link mit Vorlage

Erstellen Sie abschließend einen Link in informationList.html, damit Sie zu informationDetail.html wechseln können.

Um einen Link zu erstellen, verwendet Template sowohl das a-Tag als auch HTML. Das Problem besteht jedoch darin, wie das Ziel im href-Attribut angegeben wird. Wenn das Projekt in Zukunft wächst, kann sich die Verzeichnisstruktur ändern. Wenn in einem solchen Fall das href-Attribut als relativer Pfad angegeben wird, muss der Pfad einzeln neu geschrieben werden, was sehr problematisch ist.

Daher wird in Django das Ziel unter Verwendung des "URL-Namens" angegeben, ohne den Pfad konkret zu schreiben. Insbesondere ist es wie folgt.

informationList.html


<td><a href="{% url 'kifu_app:informationDetail' %}">{{ each_data.date }}</a></td>

Nachdem Sie es in {%%} eingeschlossen haben, schreiben Sie es als url. Beschreiben Sie als Nächstes beim Erstellen einer URL in urls.py den im Attribut * name angegebenen URL-Namen * zusammen mit dem Anwendungsnamen dieser urls.py. Mit anderen Worten, "folgen Sie dem Pfad der URL Conf mit dem Namen informationDetail in der URLConf mit dem Namen kifu_app".

Übergeben Sie einen Wert an den Link

Außerdem möchte ich dieses Mal einen Wert an den Pfad übergeben, der wie folgt geschrieben ist.

informationList.html


<td><a href="{% url 'kifu_app:informationDetail' each_data.id %}">{{ each_data.date }}</a></td>

Dadurch wird der Wert von each_data.id an die angegebene URL übergeben!

Wenn ich es tatsächlich überprüfe ... informationList4.png Wenn Sie weiter auf den Link klicken ... informationDetail.png Es funktionierte!

Einfache Implementierung von Liste und Detail

Bisher haben wir die Listen- und Detailfunktionen implementiert. Da diese Funktion jedoch häufig beim Erstellen eines Projekts verwendet wird, ist Django so konzipiert, dass der Ansichtsteil einfach implementiert werden kann.

Für Details sind die folgenden Personen sehr einfach zu verstehen und detailliert zu schreiben. Bitte beziehen Sie sich darauf.

[Einführung in die klassenbasierte generische Ansicht in Django und Beispielverwendung] 2

Vorschau beim nächsten Mal

[Geteilte Vorlage] 3

Recommended Posts

Erstellen Sie eine Shogi-Score-Management-Anwendung mit Django 5 ~ DB-Daten an Vorlage übergeben ~
Erstellen Sie eine Shogi Score Management App mit Django 6 ~ Split Template ~
Erstellen Sie eine Shogi Score Management App mit Django 4 ~ Create View ~
Erstellen Sie eine Shogi Score Management App mit Django 2 ~ Datenbankeinstellungen ~
Erstellen Sie eine Shogi-Score-Management-App mit Django 3 ~ Django Standard-Management-Site-Einstellungen ~
Erstellen einer Shogi-Score-Management-Anwendung mit Django 1-Environment building-
Versuchen Sie, mit WebSocket mit Django (Swamp Dragon) eine Todo-Verwaltungssite zu erstellen.
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Ich werde ein Spiel machen, um das Ablegen von Rätseln und Drachen mithilfe von Pygame zu kontrollieren
Entwicklung einer WEB-Anwendung mit Django [Daten vom Verwaltungsbildschirm hinzufügen]
Schritte zum Erstellen eines Django-Projekts
[Django 2.2] Fügen Sie neuen Posts mit einem Datum mithilfe eines Vorlagenfilters ein neues Abzeichen hinzu
Wenn Sie eine TODO-Anwendung (verteilt) nur mit Python-Extension 1 erstellen möchten
[Entwicklungsumgebung] So erstellen Sie einen Datensatz in der Nähe der Produktionsdatenbank
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
Entwicklung einer WEB-Anwendung mit Django [Zusätzliche Vorlage]
Erstellen einer Datenanalyseanwendung mit Streamlit
Anfänger haben versucht, eine Cloud-native Webanwendung mit Datastore / GAE zu erstellen
Wenn Sie den Wert mithilfe von Auswahlmöglichkeiten in der Vorlage im Django-Modell anzeigen möchten
Erstellen Sie einen Datensatz, indem Sie zufällig MNIST-Daten auswählen
Erstellen Sie mit Kaitai Struct einen Binärdatenparser
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
So erstellen Sie eine Rest-API in Django
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
100 Sprachverarbeitung Knock-92 (mit Gensim): Anwendung auf Analogiedaten
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 2 ~
Für mich als Django-Anfänger (1) -Erstellen eines Projekts / einer App-
Für mich als Django-Anfänger (4) - Erstellen Sie eine Memo-App-
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 3 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 4 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 5 ~
So erstellen Sie einen Datensatz, indem Sie eine Beziehung zum geerbten Modell in das von Django geerbte Modell einfügen