[PYTHON] Django Tutorial Zusammenfassung für Anfänger von Anfängern ③ (Anzeigen)

Einführung

Dieser Artikel ist eine Reihe, die das offizielle Django-Tutorial weiterentwickelt. Dieses Mal fahren wir mit dem dritten Artikel fort: "Erstellen Ihrer ersten Django-App, Teil 3".

Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ① (Projekterstellung ~) Django-Tutorial-Zusammenfassung für Anfänger von Anfängern Model (Model, Admin) Django Tutorial Zusammenfassung für Anfänger von Anfängern ③ (Anzeigen) Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ④ (generische Ansicht) Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test) Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ⑥ (statische Datei) Zusammenfassung der Django-Tutorials für Anfänger durch Anfänger ⑦ (Admin anpassen)

Erstellen Ihrer ersten Django-App, Teil 3

https://docs.djangoproject.com/ja/3.0/intro/tutorial03/

Schreiben Sie weitere Ansichten

Zu polls / views.py hinzufügen.

polls/views.py


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)

Fügen Sie es auch zu polls / urls.py hinzu.

polls/urls.py


from django.urls import path

from . import views

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

Diese Abfolge von Schritten ähnelt Routing-Arbeiten wie Rails.

Schreiben Sie eine Ansicht, die tatsächlich funktioniert

polls/views.py


from django.http import HttpResponse

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([q.question_text for q in latest_question_list])
    return HttpResponse(output)

# Leave the rest of the views (detail, results, vote) unchanged

Dies funktioniert, aber ich werde es ändern, um die HTML-Vorlage wie Rails zu verwenden.

Erstellen Sie im Umfrageverzeichnis ein Vorlagen- / Umfrageverzeichnis.

Erstellen Sie templete`index.html für den Index.

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

Auch der Ansichtsindex wird entsprechend geändert.

polls/views.py


from django.http import HttpResponse
from django.template import loader

from .models import Question


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

Verknüpfung: render ()

polls/views.py


from django.shortcuts import render

from .models import Question


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)

Da der oben erwähnte Ablauf des Renderns der Templete-Reihe häufig verwendet wird, kann er auf diese Weise weggelassen werden.

Senden eines 404-Fehlers

Ändern Sie die Details, um einen Fehler anzuzeigen, wenn keine Frage mit der angeforderten Fragen-ID vorliegt.

polls/views.py


from django.http import Http404
from django.shortcuts import render

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

Verknüpfung: get_object_or_404 ()

polls/views.py


from django.shortcuts import get_object_or_404, render

from .models import Question
# ...
def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})

Verknüpfungen werden bereitgestellt, da häufig auch das Tragen von Http404 verwendet wird, wenn das vorherige Objekt nicht vorhanden ist.

Es gibt auch eine ähnliche Verknüpfung namens "get_list_or_404 ()". Diese Funktion verhält sich wie "get_object_or_404 ()", löst jedoch Http404 aus, wenn die Liste leer ist.

Verwenden Sie das Vorlagensystem

Erstellen Sie eine Vorlage, die dem obigen Detail entspricht.

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>

Entfernen Sie die fest codierte URL in der Vorlage

Einige der Links wurden in polls / index.html fest beschichtet. Da das Argument name in der Pfadfunktion in polls.urls angegeben wurde, ersetzen Sie es durch dieses.

Dies macht es einfach, Links zu ändern, wenn sie sich ändern.

polls/index.html


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

(Entfernen-, + hinzufügen)

URL-Namespace

Derzeit existiert nur die Umfrage-App, aber was ist, wenn es andere Apps gibt und das Namensargument derselben URL dort verwendet wird?

In diesem Fall fügen Sie poll_name zu polls / urls.py hinzu.

polls/urls.py


from django.urls import path

from . import views

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

polls / index.html wird entsprechend geändert.

polls/templates/polls/index.html


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

Recommended Posts

Django Tutorial Zusammenfassung für Anfänger von Anfängern ③ (Anzeigen)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ④ (Generic View)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑦ (Customize Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑥ (statische Datei)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ② (Model, Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ① (Projekterstellung ~)
Zusammenfassung des Python Django-Tutorials
[Erklärung für Anfänger] TensorFlow-Tutorial MNIST (für Anfänger)
Zusammenfassung des maschinellen Lernens von Python-Anfängern
[Für Anfänger] Django -Entwicklungsumgebung Bau-
Was ist Schaben? [Zusammenfassung für Anfänger]
TensorFlow Tutorial MNIST Für ML-Anfänger
Django Girls Tutorial Zusammenfassung Erste Hälfte
Pandas Basics Summary Link für Anfänger
[Veraltet] Chainer v1.24.0 Anfänger-Tutorial
TensorFlow Tutorial -MNIST Für ML-Anfänger
Django Zusammenfassung
Django Zusammenfassung
[Linux-Befehlsübersicht] Befehlsliste [Muss für Anfänger]
Linux-Betrieb für Anfänger Grundlegende Befehlsübersicht
Ein Lehrbuch für Anfänger von Python-Anfängern
Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern
Django funktionsbasierte Ansicht
Python Django Tutorial (5)
Python Django Tutorial (2)
Zusammenfassung des Python-Tutorials
Django Tutorial Memo
Python Django Tutorial (8)
Python Django Tutorial (6)
Starten Sie das Django Tutorial 1
Über Nims Funktionen höherer Ordnung für Nim-Anfänger, geschrieben von Nim-Anfängern
Django klassenbasierte Ansicht
Django Filter Zusammenfassung
Durchführen des TensorFlow MNIST für ML-Anfänger-Tutorials
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django Tutorial Tutorial
Python Django Tutorial (3)
Python Django Tutorial (4)
[Übersetzung] NumPy Official Tutorial "NumPy: die absoluten Grundlagen für Anfänger"
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
[Linux] Grundlagen der Berechtigungseinstellung von chmod für Anfänger
[Für Anfänger] Django Häufig verwendete Befehle und Referenzsammlung
Zusammenfassung des Lernprogramms für maschinelles Lernen
Spacemacs-Einstellungen (für Anfänger)
Django Polymorphic Associations Tutorial
Python Lehrbuch für Anfänger
Faker Zusammenfassung nach Sprache
Django2 Konfigurationsmuster anzeigen
Django Girls Tutorial Hinweis
Dikstra-Algorithmus für Anfänger
Zusammenfassung zum Lernen von RAPIDS
OpenCV für Python-Anfänger
[Für Anfänger] Grundlagen von Python erklärt durch Java Gold Teil 2
[Übersetzen Sie das TensorFlow-Tutorial grob ins Japanische] 1. MNIST für ML-Anfänger
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)