[PYTHON] [Django] Je n'ai pas bien compris ce qu'est la méthode inverse, alors lisez le document officiel.

Source de doute

La méthode django.urls.reverse qui est apparue pour la première fois dans le tutoriel de Django partie4 (ver2.2). (Dernière ligne ci-dessous)

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

La dernière ligne reverse ('polls: results', args = (question.id,)) sera liée à la 4ème ligne de view.py ci-dessous pour générer une URL de redirection et la renvoyer au client. Je comprends cela, mais ...

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

** Pourquoi inverser? Que faites-vous "inverse"? Quelque chose est-il à l'envers? ** ** ** Quel est l '«ordre» qui n'est pas «l'inverse»? ** **

La question s'est posée et ce code ne m'est pas venu à l'esprit. C'est le début.

Parce que si c'est Flask que j'ai touché jusqu'à juste avant, je peux l'écrire comme redirect (url_for ('polls.results')) et générer une URL vers les résultats, il est facile à comprendre intuitivement au fur et à mesure de sa lecture. Alors encore plus, "Pourquoi Django est-il inversé ici?"

Comment le savoir: recherchez "reverse" dans la documentation officielle

2020-01-29_10h31_14.png

À première vue, j'ai trouvé deux liens qui lui ressemblaient, alors j'ai jeté un coup d'œil à ces deux-là.

Cependant, fonctions utilitaires django.urls dit "Oh, c'est inverse / inverse?" Dans la définition de la méthode. ..

Après avoir lu URL Dispatcher, je peux l'imaginer.

La résolution de l'URL-> vue est "avant", la résolution de la vue-> URL est "inverse"

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.

De la partie en gras de la citation ci-dessus

--Request from user to server = Trouver la vue correspondante en fonction de l'URL = ʻURL-> view= Ceci est "commande" --Trouvez l'URL correspondante basée sur view =view-> URL` = Ceci est" inverse "

J'ai découvert que.

Pour être honnête, j'étais confus sans être conscient du concept de traction avant / arrière entre l'URL et la vue. J'ai l'impression d'avoir un aperçu de l'esprit Explicit is better de Python.

Recommended Posts

[Django] Je n'ai pas bien compris ce qu'est la méthode inverse, alors lisez le document officiel.
Ne lisez pas la documentation officielle tant que je n'ai pas compris les fichiers statiques de Django
Je n'ai pas compris le comportement d'argsort de numpy, donc je vais le résumer
Je n'ai pas compris le redimensionnement de TensorFlow, alors je l'ai résumé visuellement.
Qu'est-ce que Django? .. ..
J'ai pensé "Qu'est-ce que Linux?", Alors je l'ai recherché.