[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 3

introduction

Ravi de vous rencontrer, tout le monde. Je publierai le processus de création d'une application de vote (sondage) en utilisant Django comme mémorandum. Puisque je suis un débutant de Qiita, veuillez comprendre qu'il peut être difficile à lire.

séries

Commence travail

Aperçu

View of MVC model est un programme qui renvoie l'écran à afficher à l'utilisateur.

Dans l'application de vote, créez les quatre vues suivantes:

Page "Index" des questions - Afficher quelques-unes des dernières questions Page "Détails" de la question - Afficher le texte de la question et le formulaire de vote sans afficher les résultats Page "Résultats" de la question - Afficher les résultats d'une question spécifique Page de vote - Acceptez la sélection de questions spécifiques comme vote

Au fait, la fonction Django qui obtient la vue depuis l'URL s'appelle URLconf.

Écrire plus de vues

Implémentez l'opération suivante à l'aide d'URLconf.

L'utilisateur accède à "/ polls / 100 /" → Lisez polls / urls.py pour faire correspondre path.'polls / 'dans config / urls.py → Renvoie les détails (request = , question_id = 100) de views.py car il correspond au chemin.'100 / 'des sondages / urls.py

polls/views.py


# Create your views here.
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello,world.You're at the polls index.")


def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)


def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)


def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

question_id = 100 est pris en sandwich entre <> et capturé à partir d'une partie de l'URL.

polls/urls.py


from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

Écrivez une vue qui fonctionne réellement

Avez-vous déjà fait quelque chose qui n'a pas fonctionné ... Cela semble différent. "En fait fonctionne" semble signifier "implémenter le traitement HttpRequest et le traitement des exceptions pour réaliser un comportement qui est en ligne avec le fonctionnement réel".

Ajoutez ce qui suit à la vue.

polls/views.py


from .models import Question
from django.template import loader


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = {
        'latest_question_list': latest_question_list,
    }
    return HttpResponse(template.render(context, request))

Transmettez la dernière_question_list à polls / index.html avec "template.render (context, request)" et effectuez le rendu. Selon les spécifications du loader.get_template de Django, il semble que le modèle de rendu soit recherché dans le répertoire ".templates / app name (polls)".

polls/templates/polls/index.html


{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

Vous pouvez également créer un raccourci. Importez le rendu de django.shortcut.

polls/views.py


from .models import Question
from django.shortcuts import render


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {
        'latest_question_list': latest_question_list,
    }
    return render(request, 'polls/index.html', context)

Vous devriez voir un écran comme celui-ci. image.png image.png

Envoi d'une erreur 404

Commencez par créer une vue.

polls/views.py


from django.http import HttpResponse, Http404
from .models import Question
from django.shortcuts import render

def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("Question dose not exist")
    return render(request, 'polls/detail.html', {'question': question})

Puis HTML

polls/templates/polls/detail.html


{{question}}

Vérifiez le fonctionnement.

Puisque question_id = 5 existe, «http://127.0.0.1:8000/polls/5/» s'affiche comme suit. .. image.png

Puisque question_id = 999 n'existe pas, "[http://127.0.0.1:8000/polls/999/ (http://127.0.0.1:8000/polls/999/)" s'affiche comme suit. .. Une exception est détectée et «Question dose not exist» s'affiche. image.png

Utiliser le système de modèles

Marquez le html sur la page de détails.

polls/templates/polls/detail.html


<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>

"Http://127.0.0.1:8000/polls/5/" s'affiche à nouveau. image.png

Supprimer l'URL codée en dur dans le modèle

Rendez la variable de partie URL. En effet, le modèle doit être modifié lorsque l'URL est modifiée.

Comme mécanisme, vous avez spécifié name = 'detail' dans polls / urls.py> urlpatterns> path. Chargez-le dans polls / templates / polls / index.html. Ensuite, l'URL associée à name = 'detail' sera lue.

polls/templates/polls/index.html


<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

polls/urls.py


urlpatterns = [
    ***
    path('<int:question_id>/', views.detail, name='detail'),
    ***
]

Il n'y a pas de problème d'affichage.

image.png

Espace de noms de nom d'URL

L'application que j'ai créée cette fois n'est qu'une application de sondage. Si vous créez plusieurs applications, elles peuvent avoir une vue détaillée. Pour récupérer la vue détaillée de l'application de sondages, créez et spécifiez un espace de noms.

Pour créer un espace de noms, ajoutez app_name = <nom de l'application> à <nom de l'application> / templates / <nom de l'application> /index.html.

polls/urls.py


app_name = 'polls'
urlpatterns = [
    ***
    path('<int:question_id>/', views.detail, name='detail'),
    ***
]

La spécification d'URL qui spécifie l'espace de noms est <nom de l'application>: détail.

polls/templates/polls/index.html


<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

C'est tout pour aujourd'hui. Merci beaucoup.

Recommended Posts

[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django-Partie 7-
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 1-
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 2
[Débutant] [Python / Django] Un ingénieur web débutant a essayé un didacticiel Django - Partie 0-
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un tutoriel Django - Partie 6
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 4
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 3
Framework Web Django Python
Déployer des applications Web Python 3.6 / Django / Postgres sur Azure
(Python) Essayez de développer une application Web en utilisant Django
Le débutant de la CTF a tenté de créer un serveur problématique (Web) [Problème]
Web scraping débutant avec python
Un ingénieur en arts libéraux a essayé de frapper 100 processus linguistiques en Python 02
Un débutant en python a essayé de faire un stage dans une entreprise informatique
Un ingénieur en arts libéraux a essayé de frapper 100 processus linguistiques en Python 01
Un ingénieur en arts libéraux a essayé de frapper 100 processus linguistiques en Python 00
[Python / Django] Créer une API Web qui répond au format JSON
J'ai essayé webScraping avec python.
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)
le codeur Web a essayé d'exceller en Python
Les débutants en Python ont essayé d'utiliser Bottle et cela a fonctionné facilement de manière inattendue
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (00 ~ 04)
Une introduction aux applications Web Python auto-conçues pour un ingénieur Web de troisième année paresseux
Une note où un débutant Python s'est retrouvé coincé
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
[Python] Une application web rapide avec Bottle!
J'ai créé une API Web
Utiliser Django à partir d'un script Python local
Exécutez une application Web Python avec Docker
Créez un framework Web avec Python! (1)
J'ai essayé de comparer le cadre d'application Web
Créez un framework Web avec Python! (2)
J'ai fait une application WEB avec Django
Un débutant en python a tenté de faire un stage dans une entreprise informatique [Enquête sur le chatbot jour 2]
Un débutant en python a tenté de faire un stage dans une entreprise informatique [Processus de développement du jour 1]
Les débutants ont essayé de créer une application Web native pour le cloud à l'aide de Datastore / GAE
J'ai recherché les compétences nécessaires pour devenir ingénieur web avec Python
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 1
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé de jouer à un jeu de frappe avec Python
[Python] Créer un environnement de développement Django avec Docker
[Python] Dessinez un Mickey Mouse avec une tortue [Débutant]
Créer une carte Web en utilisant Python et GDAL
Étapes pour développer une application Web en Python
[Python] Préparation au développement Web (création d'un environnement virtuel)
J'ai essayé de lire un fichier CSV en utilisant Python
Enregistrement de l'examen de base de la certification d'ingénieur Python3 pour débutant en programmation
Lancer un serveur Web avec Python et Flask
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 2
Exécutez des fichiers Python à partir de HTML en utilisant Django
J'ai essayé d'exécuter alembic, un outil de migration pour Python
Créez rapidement un environnement Python Django avec IntelliJ
Notes sur la création d'un environnement python par les débutants
[Python] Dépannage des débutants tout en étudiant l'application Web de Django
Pour moi en tant que débutant Django (3) - Bonjour tout le monde! ---