[PYTHON] [Django] Ich habe die umgekehrte Methode nicht ganz verstanden, also lies das offizielle Dokument.

Quelle des Zweifels

Die django.urls.reverse Methode, die zuerst in Djangos Tutorial Teil4 (Version 2.2) veröffentlicht wurde. (Letzte Zeile unten)

polls/views.py


from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Choice, Question
# ...
def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # Redisplay the question voting form.
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if a
        # user hits the Back button.
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

Die letzte Zeile "reverse" ("polls: results", args = (question.id,)) "wird mit der vierten Zeile von" view.py "unten verknüpft, um eine Weiterleitungs-URL zu generieren und an den Client zurückzugeben. Ich verstehe das, aber ...

polls/urls.py


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

** Warum umkehren? Was machst du "umgekehrt"? Ist etwas verkehrt herum? ** ** ** ** Was ist die "Reihenfolge", die nicht die "Umkehrung" ist? ** ** **

Die Frage kam auf und dieser Code kam mir nicht in den Sinn. Das ist der Anfang.

Wenn ich Flask bis kurz zuvor berührt habe, kann ich es wie "redirect (url_for ('polls.results'))" schreiben und eine URL zu den Ergebnissen generieren. Es ist leicht zu verstehen, wenn es gelesen wird. Umso mehr: "Warum ist Django hier umgekehrt?"

So finden Sie es heraus: Suchen Sie in der offiziellen Dokumentation nach "Reverse"

2020-01-29_10h31_14.png

Auf den ersten Blick fand ich zwei Links, die so aussahen, also habe ich mir diese beiden kurz angesehen.

In django.urls Utility-Funktionen wird jedoch in der Methodendefinition nicht "Oh, das ist umgekehrt / umgekehrt?" ..

Nachdem ich URL Dispatcher gelesen habe, kann ich es mir vorstellen.

URL-> Ansichtsauflösung ist "vorwärts", Ansicht-> URL-Auflösung ist "rückwärts"

Django provides a solution such that the URL mapper is the only repository of the URL design. You feed it with your URLconf and then it can be used in both directions:

The first one is the usage we’ve been discussing in the previous sections. The second one is what is known as reverse resolution of URLs, reverse URL matching, reverse URL lookup, or simply URL reversing.

Aus dem fetten Teil des obigen Zitats

--Anforderung vom Benutzer an den Server = Suche nach entsprechender Ansicht basierend auf URL = URL-> Ansicht = Dies ist" Bestellung " --Finden Sie die entsprechende URL basierend auf view = view-> URL = Dies ist" umgekehrt "

Ich habe herausgefunden, dass.

Um ehrlich zu sein, war ich verwirrt, ohne das Konzept des Vorwärts- / Rückwärts-Pulls zwischen URL und Ansicht zu kennen. Ich habe das Gefühl, einen Blick auf den expliziten, besseren Geist von Python zu werfen.

Recommended Posts

[Django] Ich habe die umgekehrte Methode nicht ganz verstanden, also lies das offizielle Dokument.
Lesen Sie die offizielle Dokumentation erst, wenn ich die statischen Dateien von Django verstanden habe
Ich habe das Verhalten von Argsort of Numpy nicht verstanden, deshalb werde ich es zusammenfassen
Ich habe die Größenänderung von TensorFlow nicht verstanden und sie daher visuell zusammengefasst.
Was ist Django? .. ..
Ich dachte "Was ist Linux?", Also habe ich es nachgeschlagen.