In einem Django-Online-Kurs lässt der Ausbilder mit der Funktion url()
Ansichten aufrufen und reguläre Ausdrücke in der Liste der URL-Muster verwenden. Ich habe auf youtube noch weitere Beispiele dafür gesehen.
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 Durchführen des Django-Tutorials verwenden sie jedoch path()
statt z.
from Django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
Darüber hinaus scheinen reguläre Ausdrücke nicht mit der path()
-Funktion zu funktionieren, da mit path(r'^$', views.index, name="index")
die mysite.com/polls/
-Ansicht nicht gefunden wird.
Stimmt die Verwendung von path()
ohne regulären Ausdruck in die richtige Richtung? Ist url()
leistungsfähiger, aber komplizierter, so dass sie path()
verwenden, um mit uns zu beginnen? Oder handelt es sich um unterschiedliche Werkzeuge für verschiedene Jobs?
Aus der Django-Dokumentation für url
url(regex, view, kwargs=None, name=None)
Diese Funktion ist ein Alias fürDjango.urls.re_path()
. Es ist wahrscheinlich in .__ veraltet. eine zukünftige Veröffentlichung.
Der Hauptunterschied zwischen path
und re_path
ist, dass path
die Route ohne Regex verwendet
Sie können re_path
für komplexe Regex-Aufrufe verwenden und nur path
für einfachere Suchvorgänge
Die neue Funktion Django.urls.path()
ermöglicht eine einfachere und besser lesbare URL-Routing-Syntax. Zum Beispiel dieses Beispiel aus früheren Django-Versionen:
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
könnte geschrieben werden als:
path('articles/<int:year>/', views.year_archive)
Die Funktion Django.conf.urls.url()
aus früheren Versionen ist jetzt als Django.urls.re_path()
verfügbar. Der alte Speicherort bleibt aus Gründen der Abwärtskompatibilität ohne bevorstehende Abwertung erhalten. Die alte Funktion Django.conf.urls.include()
kann jetzt aus Django.urls
importiert werden, sodass Sie Folgendes verwenden können:
from Django.urls import include, path, re_path
in den URLconfs. Zur weiteren Lektüre Django doc
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 sicher eine einfachere Art sein, Dinge zu tun; Ich würde nicht sagen, dass die URL mächtiger ist. Sie sollten Muster in beiden Formaten ausdrücken können.
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
Sieht nach mehr Pythonic-Methode aus und aktiviert den regulären Ausdruck nicht in Argumenten, die Sie an view übergeben. Sie können die int () - Funktion zum Beispiel verwenden.
Reguläre Ausdrücke scheinen mit der Funktion path()
mit den folgenden Argumenten nicht zu funktionieren: path(r'^$', views.index, name="index")
.
Es sollte so sein: path('', views.index, name="index")
.
Das 1. Argument muss leer sein, um einen regulären Ausdruck eingeben zu können.
Von Version 2.0 aus verwenden viele Benutzer den Pfad, aber wir können entweder Pfad oder URL verwenden Zum Beispiel kann in Django 2.1.1 .__ die Zuordnung von Funktionen zu Funktionen über URL folgendermaßen erfolgen
from Django.contrib import admin
from Django.urls import path
from Django.contrib.auth import login
from posts.views import post_home
from Django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^posts/$', post_home, name='post_home'),
]
wobei posts eine Anwendung ist & post_home eine Funktion in views.py ist