[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 3-

Einführung

Schön euch kennenzulernen, alle zusammen. Ich werde den Prozess der Erstellung eines Abstimmungsantrags mit Django als Memorandum veröffentlichen. Da ich ein Anfänger von Qiita bin, verstehen Sie bitte, dass es schwierig sein kann, es zu lesen.

Serie

Fang an zu arbeiten

Überblick

Die Ansicht des MVC-Modells ist ein Programm, das den Bildschirm zurückgibt, der dem Benutzer angezeigt werden soll.

Erstellen Sie im Abstimmungsantrag die folgenden vier Ansichten:

Fragen "Index" -Seite - Zeigen Sie einige der neuesten Fragen an Seite "Details" der Frage - Fragetext und Abstimmungsformular anzeigen, ohne Ergebnisse anzuzeigen Frage "Ergebnisse" - Zeigen Sie die Ergebnisse einer bestimmten Frage an Abstimmungsseite - Akzeptieren Sie die Auswahl bestimmter Fragen als Abstimmung

Die Django-Funktion, die die Ansicht von der URL abruft, heißt übrigens URLconf.

Schreiben Sie weitere Ansichten

Implementieren Sie den folgenden Vorgang mit URLconf.

Benutzer greift auf "/ polls / 100 /" zu → Lesen Sie polls / urls.py, um mit path.'polls / 'in config / urls.py übereinzustimmen → Gibt Details (request = , question_id = 100) von views.py zurück, da sie mit path.'100 / 'von polls / urls.py übereinstimmen

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 wird zwischen <> eingefügt und von einem Teil der URL erfasst.

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

Schreiben Sie eine Ansicht, die tatsächlich funktioniert

Hast du jemals etwas gemacht, das nicht funktioniert hat ... Es scheint anders zu sein. "Funktioniert tatsächlich" scheint zu bedeuten, "HttpRequest-Verarbeitung und Ausnahmeverarbeitung zu implementieren, um ein Verhalten zu realisieren, das dem tatsächlichen Betrieb entspricht".

Fügen Sie der Ansicht Folgendes hinzu.

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

Übergeben Sie die Datei "latest_question_list" mit "template.render (context, request)" an polls / index.html und rendern Sie sie. Gemäß den Spezifikationen von Djangos loader.get_template wird die Rendering-Vorlage anscheinend im Verzeichnis ".templates / app name (polls)" durchsucht.

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

Sie können auch eine Verknüpfung erstellen. Importieren Sie das Rendering aus 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)

Sie sollten einen Bildschirm wie diesen sehen. image.png image.png

Senden eines 404-Fehlers

Erstellen Sie zunächst eine Ansicht.

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

Dann HTML

polls/templates/polls/detail.html


{{question}}

Überprüfen Sie den Betrieb.

Da question_id = 5 vorhanden ist, wird "http://127.0.0.1:8000/polls/5/" wie folgt angezeigt. .. image.png

Da question_id = 999 nicht vorhanden ist, wird "[http://127.0.0.1:8000/polls/999/ lightboxes(http://127.0.0.1:8000/polls/999/)" wie folgt angezeigt. .. Die Ausnahme wird abgefangen und "Fragendosis nicht vorhanden" wird angezeigt. image.png

Verwenden Sie das Vorlagensystem

Markieren Sie das HTML auf der Detailseite.

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/" wird erneut angezeigt. image.png

Entfernen Sie die fest codierte URL in der Vorlage

Machen Sie den URL-Teil variabel. Dies liegt daran, dass die Vorlage geändert werden muss, wenn die URL geändert wird.

Als Mechanismus haben Sie name = 'detail' in polls / urls.py> urlpatterns> path angegeben. Laden Sie dies in polls / templates / polls / index.html. Dann wird die mit name = 'detail' verknüpfte URL gelesen.

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

Es gibt kein Problem mit der Anzeige.

image.png

URL-Namens-Namespace

Die App, die ich dieses Mal erstellt habe, ist nur eine Umfrage-App. Wenn Sie mehrere Apps erstellen, haben diese möglicherweise eine Detailansicht. Erstellen Sie einen Namespace und geben Sie ihn an, um die Detailansicht der Umfrage-App abzurufen.

Um einen Namespace zu erstellen, fügen Sie app_name = zu / templates / /index.html hinzu.

polls/urls.py


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

Die URL-Angabe, die den Namespace angibt, lautet : Detail.

polls/templates/polls/index.html


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

Das ist alles für heute. Vielen Dank.

Recommended Posts

[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 7-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 1-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 2-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 0-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 6-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 4-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 3-
Django Python Web Framework
Stellen Sie Python 3.6 / Django / Postgres-Webanwendungen in Azure bereit
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
CTF-Anfänger haben versucht, einen Problemserver (Web) zu erstellen [Problem]
Web Scraping Anfänger mit Python
Ein Ingenieur für freie Künste hat versucht, 100 Sprachprozesse in Python 02 zu klopfen
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren
Ein Ingenieur für freie Künste hat versucht, 100 Sprachprozesse in Python 01 zu klopfen
Ein Ingenieur für freie Künste hat versucht, 100 Sprachprozesse in Python 00 zu klopfen
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
Ich habe versucht, WebScraping mit Python.
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
Webcodierer versucht Excel in Python
Python-Anfänger haben versucht, Bottle zu verwenden, und es hat unerwartet leicht funktioniert
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
Eine Einführung in selbst erstellte Python-Webanwendungen für einen trägen Webingenieur im dritten Jahr
Eine Notiz, in der ein Python-Anfänger stecken blieb
[Anfänger] Leicht verständliches Python-Web-Scraping mit Google Colaboratory
[Python] Eine schnelle Webanwendung mit Bottle!
Ich habe eine Web-API erstellt
Verwenden Sie Django aus einem lokalen Python-Skript
Führen Sie eine Python-Webanwendung mit Docker aus
Erstellen Sie ein Webframework mit Python! (1)
Ich habe versucht, das Webanwendungs-Framework zu vergleichen
Erstellen Sie ein Webframework mit Python! (2)
Ich habe eine WEB-Bewerbung bei Django gemacht
Ein Python-Anfänger hat versucht, bei einem IT-Unternehmen zu praktizieren [Tag 2 Chatbot-Umfrage]
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren [Tag 1 Entwicklungsprozess]
Anfänger haben versucht, eine Cloud-native Webanwendung mit Datastore / GAE zu erstellen
Ich suchte nach den Fähigkeiten, die erforderlich sind, um Webingenieur bei Python zu werden
Maschinelles Lernen eines jungen Ingenieurs Teil 1
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, mit Python ein Tippspiel zu spielen
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
[Python] Zeichne eine Mickey Mouse mit Turtle [Anfänger]
Erstellen Sie eine Webmap mit Python und GDAL
Schritte zum Entwickeln einer Webanwendung in Python
[Python] Webentwicklungsvorbereitung (Erstellen einer virtuellen Umgebung)
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Programmieranfänger Python3 Ingenieur Zertifizierung Grundprüfungsprotokoll
Starten Sie einen Webserver mit Python und Flask
Maschinelles Lernen eines jungen Ingenieurs Teil 2
Führen Sie Python-Dateien mit Django aus HTML aus
Ich habe versucht, alembic auszuführen, ein Migrationstool für Python
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
Hinweise zum Erstellen einer Python-Umgebung durch Anfänger
[Python] Fehlerbehebung für Anfänger beim Studium der Webanwendung von Django
Für mich als Django-Anfänger (3) - Hallo Welt! --- ---.