In einem Django-Online-Kurs lässt uns der Kursleiter die url()
Funktion verwenden, um Ansichten aufzurufen und reguläre Ausdrücke in der URL-Musterliste zu verwenden. Ich habe auf youtube andere Beispiele dafür gesehen. z.B
from django.contrib import admin
from django.urls import include
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^polls/', include('polls.urls')),
]
#and in polls/urls.py
urlpatterns = [
url(r'^$', views.index, name="index"),
]
Beim Durchlaufen des Django-Tutorials verwenden sie jedoch path()
stattdessen z.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
Außerdem scheinen reguläre Ausdrücke mit der path()
Funktion nicht zu funktionieren, da die Verwendung von a path(r'^$', views.index, name="index")
die mysite.com/polls/
Ansicht nicht findet .
Stimmt die Verwendung path()
ohne Regex mit der richtigen Vorgehensweise überein? Ist url()
es mächtiger, aber komplizierter, damit sie uns path()
anfangen? Oder handelt es sich um unterschiedliche Werkzeuge für unterschiedliche Aufgaben?
python
django
django-urls
FrostedCookies
quelle
quelle
path()
und zu vermeidenurl()
. Wenn Sie reguläre Ausdrücke verwenden möchten oder müssen, müssen Siere_path()
oder verwendenurl()
. Darüber hinaus liegt es ganz bei Ihnen, für welches Sie sich entscheiden.Antworten:
Aus der Django-Dokumentation für URL
Hauptunterschied zwischen
path
undre_path
ist daspath
die Route ohne Regex verwendet wirdSie können es
re_path
für komplexe Regex-Aufrufe und nurpath
für einfachere Suchvorgänge verwendenquelle
re_path
ist das, wonach ich dann suche.Die neue
django.urls.path()
Funktion ermöglicht eine einfachere und besser lesbare URL-Routing-Syntax. Zum Beispiel dieses Beispiel aus früheren Django-Versionen:könnte geschrieben werden als:
Die
django.conf.urls.url()
Funktion aus früheren Versionen ist jetzt verfügbar alsdjango.urls.re_path()
. Der alte Standort bleibt aus Gründen der Abwärtskompatibilität erhalten, ohne dass eine Verfall unmittelbar bevorsteht. Die altedjango.conf.urls.include()
Funktion kann jetzt importiert werden,django.urls
sodass Sie Folgendes verwenden können:in den URLconfs . Zur weiteren Lektüre django doc
quelle
path()
Beispiel nicht vierstellige Zahlen zulässt./<int:year>/
bedeutet, dass das Jahr ganzzahlig sein sollte. Ich schlage vor, Sie sehen sich die offizielle Dokumentation an.int
ist nicht gleichbedeutend mit[0-9]{4}
. Ob es für ganze Zahlen verwendet wird oder nicht, hat keinen Einfluss auf diese Beziehung. Vielleicht , wenn Sie ersetzt[0-9]{4}
mit[0-9]+
Ihrem Vergleich könnte weniger ungenau, obwohl Sie noch mit der Art des Endergebnisses zu behandeln (str vs int?) Benötigen.path
ist einfach neu in Django 2.0, das erst vor ein paar Wochen veröffentlicht wurde. Die meisten Tutorials wurden für die neue Syntax nicht aktualisiert.Es sollte sicherlich eine einfachere Art sein, Dinge zu tun; Ich würde nicht sagen, dass die URL leistungsfähiger ist. Sie sollten in der Lage sein, Muster in beiden Formaten auszudrücken.
quelle
Reguläre Ausdrücke scheinen mit der
path()
Funktion mit den folgenden Argumenten nicht zu funktionieren:path(r'^$', views.index, name="index")
.Es sollte so sein:
path('', views.index, name="index")
.Das erste Argument muss leer sein, um einen regulären Ausdruck einzugeben.
quelle
Path ist eine neue Funktion von Django 2.0. Hier erklärt: https://docs.djangoproject.com/de/2.0/releases/2.0/#whats-new-2-0
Sehen Sie wie eine pythonischere Methode aus und aktivieren Sie die Verwendung von regulären Ausdrücken in Argumenten, die Sie an die Ansicht übergeben ... Sie können beispielsweise die Funktion int () verwenden.
quelle
Ab Version 2.0 verwenden viele Benutzer den Pfad, aber wir können entweder den Pfad oder die URL verwenden. In Django 2.1.1 kann die Zuordnung zu Funktionen über die URL beispielsweise wie folgt erfolgen
Dabei ist posts eine Anwendung und post_home eine Funktion in views.py
quelle