wake-up-neo.com

Ist es besser, für Django 2.0 path () oder url () in urls.py zu verwenden?

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?

65
FrostedCookies

Aus der Django-Dokumentation für url

url(regex, view, kwargs=None, name=None) Diese Funktion ist ein Alias ​​für Django.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

88
iklinac

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

31
silva blaze

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.

15
Daniel Roseman

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.

6
Denis Cottin

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.

4
Danish Shaikh

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

0
Nani Chintha