[PYTHON] Créer une application de gestion de partition shogi à l'aide de Django 5 ~ Passer les données de la base de données au modèle ~

introduction

Ceci est ** 5th **, un mémorandum de création d'une application de gestion de partition shogi à l'aide de Django.

Environnement de travail

L'environnement de travail cette fois-ci est le suivant

De plus, la structure de répertoires de Django ressemble à ceci:

- 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

Contenu de cet article

Créer un écran de liste

Commençons par enregistrer certaines données dans la base de données.

Ensuite, retirez les données avec View et affichez-les avec Template. Ici, les données sont extraites de la table Information et affichées dans une liste.

Créer une URL

Créez une nouvelle URL pour ʻinformationList` dans 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'),  #ajouter à
]

Récupérer des données avec View

Modifiez views.py comme suit et ajoutez la méthode informationList.

views.py


from django.shortcuts import render
from .models import Information         #ajouter à(Vous permet de travailler avec la table d'informations)

#~ Omis ~

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

La partie importante est ʻInformation.objects.all () `. Les données sont extraites de la table d'informations de cette partie. Ici, toutes les données sont récupérées par la méthode all.

Vous pouvez également sélectionner et trier ceux qui répondent à vos critères spécifiques en choisissant la bonne méthode. Les personnes suivantes l'ont résumé, donc je pense que ce sera utile. [Résumé des opérations de la base de données Django] 1

Afficher les données reçues comme modèle

Ensuite, créons informationList.html et affichons les données transmises à partir de View pour le moment.

informationList.html


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

Ensuite, vous verrez quelque chose comme ce qui suit à l'écran. informationList1

Afficher les données reçues une par une dans le modèle

Ensuite, tournons les données avec for et extrayons-les une par une.

informationList.html


    <body>
        {% for each_data in data %}
        <h3>{{ each_data }}</h3>
        {% endfor %}
    </body>
informationList2.png Avec cela, je sens que je ne peux récupérer que la date et l'heure du jeu. Cependant, c'est parce que lorsque la méthode \ _ \ _ str__ a été ajoutée à la classe Information de models.py dans la partie 3, self.date a été renvoyée, et je pense qu'il est en fait bon de la reconnaître comme Object.

Afficher les données pour les colonnes individuelles

Récupérons donc les données individuelles contenues dans l'objet.

Pour accéder aux données individuelles, connectez les variables de colonne définies dans models.py à l'opérateur.

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

J'ai pu afficher correctement les données individuelles!

Permet la transition des données individuelles à l'écran de détail

Ensuite, vous pouvez accéder à chaque page de détails à partir de l'écran de liste.

Je souhaite transmettre des informations du modèle à la vue

Il n'est pas pratique de créer un fichier HTML pour chaque donnée lorsque vous essayez de créer une page de détails. Il est courant de préparer un modèle pour l'écran de détails et de modifier la valeur affichée en fonction des données sélectionnées.

Ce que vous devez faire à ce moment-là, c'est que ** les informations sur les données sélectionnées doivent être envoyées à Afficher à partir du modèle (écran de liste) **. Sans cela, la vue ne saurait pas quelles données détaillées transmettre au modèle (écran de détail).

Une pratique courante consiste à mettre les informations dans l'URL. Par exemple, mettons l'ID des données sur l'URL. Ensuite, si l'URL est / informationDetail / 2, vous pouvez juger à partir de View que vous devez récupérer les données avec ID = 2.

Maintenant, implémentons une telle fonction.

Créer une URL

Tout d'abord, créez une URL. Cependant, contrairement à avant, la partie où l'ID est placé n'est pas une valeur fixe mais une valeur variable, alors écrivez-la d'une manière acceptable. Plus précisément, c'est comme suit.

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'),
]

La partie pour laquelle vous voulez créer une valeur de variable est OK si vous décrivez l'URL sous la forme «<type: nom de la variable>». (Très facile!)

Recevoir l'ID sélectionné dans la liste dans View

Ensuite, la vue ressemble à ci-dessous.

views.py


from django.shortcuts import render
from .models import Information
from django.shortcuts import get_object_or_404      #ajouter à

#~ Omis ~

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

Puisque le nom de la variable a été défini sur ʻinformation_id dans le paramètre d'URL précédemment, ajoutez ʻinformation_id à l'argument de la méthode à appeler. Veuillez noter qu'une erreur se produira si ce nom de variable est différent de celui écrit dans l'URL.

Il existe également une nouvelle méthode appelée get_object_or_404, qui est

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

Ce n'est pas grave si vous reconnaissez que le travail de est écrit sur une seule ligne.

Créer un modèle pour l'écran des détails

Procédez simplement comme suit:

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>

Créer un lien avec un modèle

Enfin, créez un lien dans informationList.html afin de pouvoir effectuer la transition vers informationDetail.html.

Pour créer un lien, Template utilise la balise a ainsi que HTML, mais le problème est de savoir comment spécifier la destination dans l'attribut href. À mesure que le projet se développera à l'avenir, la structure des répertoires peut changer. Dans un tel cas, si l'attribut href est spécifié comme chemin relatif, le chemin doit être réécrit un par un, ce qui est très gênant.

Par conséquent, dans Django, la destination est spécifiée en utilisant "nom d'URL" sans écrire concrètement le chemin. Plus précisément, c'est comme suit.

informationList.html


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

Après l'avoir enfermé dans {%%}, écrivez ʻurl`. Ensuite, lors de la création d'une URL dans urls.py, décrivez le nom de l'URL * spécifié dans l'attribut * name avec le nom_app de cette urls.py. En d'autres termes, "suivez le chemin de l'URL Conf nommée informationDetail dans l'URLConf nommée kifu_app".

Passer une valeur au lien

De plus, cette fois, je veux passer une valeur au chemin, qui s'écrit comme suit.

informationList.html


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

Cela passera la valeur de each_data.id à l'URL spécifiée!

Quand je le vérifie réellement ... informationList4.png Si vous cliquez davantage sur le lien ... informationDetail.png Ça a marché!

Implémentez facilement la liste et le détail

Jusqu'à présent, nous avons implémenté les fonctions List et Detail, mais comme cette fonction est souvent utilisée lors de la création d'un projet, Django est conçu pour que la partie View puisse être facilement implémentée.

Pour plus de détails, les personnes suivantes sont très faciles à comprendre et à écrire en détail, veuillez vous y référer.

[Introduction à la vue générique basée sur les classes dans Django et exemple d'utilisation] 2

Aperçu de la prochaine fois

[Modèle de fractionnement] 3

Recommended Posts

Créer une application de gestion de partition shogi à l'aide de Django 5 ~ Passer les données de la base de données au modèle ~
Créez une application de gestion de partition shogi à l'aide de Django 6 ~ Split Template ~
Créez une application de gestion de partition shogi à l'aide de Django 4 ~ Créer une vue ~
Créez une application de gestion de score shogi à l'aide de Django 2 ~ Paramètres de la base de données ~
Créez une application de gestion de score shogi à l'aide de Django 3 ~ Paramètres du site de gestion par défaut de Django ~
Création d'une application de gestion de score shogi à l'aide de Django 1-Construction de l'environnement-
Essayez de créer un site de gestion Todo en utilisant WebSocket avec Django (Swamp Dragon)
(Python) Essayez de développer une application Web en utilisant Django
Je vais créer un jeu pour contrôler le puzzle et les dragons en utilisant pygame
Développement d'une application WEB avec Django [Ajouter des données depuis l'écran de gestion]
Étapes pour créer un projet Django
[Django 2.2] Ajouter un nouveau badge aux nouveaux messages avec une date à l'aide d'un filtre de modèle
Si vous souhaitez créer une application TODO (distribuée) en utilisant uniquement Python-Extension 1
[Environnement de développement] Comment créer un ensemble de données proche de la base de données de production
[Python] [Word] [python-docx] Essayez de créer un modèle de phrase de mot en Python en utilisant python-docx
Développement d'une application WEB avec Django [modèle supplémentaire]
Création d'une application d'analyse de données à l'aide de Streamlit
Les débutants ont essayé de créer une application Web native pour le cloud à l'aide de Datastore / GAE
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django
Créer un ensemble de données en échantillonnant au hasard les données MNIST
Créer un analyseur de données binaires à l'aide de Kaitai Struct
Créez une application Hello World avec un seul fichier avec django
Comment créer une API Rest dans Django
J'ai créé un jeu ○ ✕ avec TensorFlow
Essayez de créer une table d'enregistrement de bataille avec matplotlib à partir des données de "Schedule-kun"
Créer un bot de collecte de données en Python à l'aide de Selenium
100 langage traitement knock-92 (utilisant Gensim): application aux données d'analogie
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 1 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 2 ~
À moi-même en tant que débutant Django (1) -Création d'un projet / application-
À moi-même en tant que débutant Django (4) --Créer une application mémo-
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 3 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 4 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 5 ~
Comment créer un enregistrement en collant une relation au modèle source d'héritage dans le modèle hérité par Django