W kursie online django, instruktor url()
każe nam używać funkcji do wywoływania widoków i używania wyrażeń regularnych na liście urlpatterns. Widziałem inne przykłady tego na youtube. na przykład
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"),
]
Jednak przechodząc przez samouczek Django, używają path()
zamiast tego np .:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
Ponadto wyrażenia regularne wydają się nie działać z path()
funkcją, ponieważ użycie a path(r'^$', views.index, name="index")
nie spowoduje znalezienia mysite.com/polls/
widoku.
Czy używanie path()
dopasowania bez wyrażenia regularnego jest poprawne? Czy url()
jest potężniejszy, ale bardziej skomplikowany, więc używają go, path()
aby nas zacząć? A może chodzi o różne narzędzia do różnych zadań?
python
django
django-urls
FrostedCookies
źródło
źródło
path()
iurl()
. Jeśli chcesz lub potrzebujesz użyć wyrażeń regularnych, musisz użyćre_path()
luburl()
. Poza tym myślę, że to naprawdę zależy od ciebie, który wybierzesz.Odpowiedzi:
Z dokumentacji Django dla url
Kluczowa różnica między
path
ire_path
polega na tym, żepath
używa trasy bez wyrażenia regularnegoMożna go używać
re_path
do złożonych wywołań wyrażeń regularnych i używać tylkopath
do prostszego wyszukiwaniaźródło
re_path
jest tym czego szukam.Nowa
django.urls.path()
funkcja pozwala na prostszą, bardziej czytelną składnię routingu adresów URL. Na przykład ten przykład z poprzednich wydań Django:url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
można zapisać jako:
path('articles/<int:year>/', views.year_archive)
django.conf.urls.url()
Funkcji z poprzednich wersji jest już dostępnadjango.urls.re_path()
. Stara lokalizacja zachowuje zgodność z poprzednimi wersjami, bez rychłego wycofania. Starądjango.conf.urls.include()
funkcję można teraz zaimportować z,django.urls
więc możesz użyć:from django.urls import include, path, re_path
w pliku URLconfs . Więcej informacji na temat django doc
źródło
path()
przykład dopuszcza liczby inne niż czterocyfrowe./<int:year>/
oznacza, że rok powinien być w całkowitej, proponuję spojrzeć za pośrednictwem oficjalnej dokumentacji.int
nie jest odpowiednikiem[0-9]{4}
. To, czy jest używany do liczb całkowitych, czy nie, nie ma wpływu na tę zależność. Być może zastąpienie[0-9]{4}
przez[0-9]+
porównanie może być mniej niedokładne, chociaż nadal możesz potrzebować poradzić sobie z typem wyniku końcowego (str czy int?).path
jest po prostu nowością w Django 2.0, które zostało wydane zaledwie kilka tygodni temu. Większość samouczków nie została zaktualizowana do nowej składni.Z pewnością miał to być prostszy sposób robienia rzeczy; Nie powiedziałbym, że URL jest potężniejszy, powinieneś być w stanie wyrazić wzorce w każdym formacie.
źródło
Wyrażenia regularne nie wydają się działać z
path()
funkcji z następującymi argumentami:path(r'^$', views.index, name="index")
.Powinno być tak:
path('', views.index, name="index")
.Aby wprowadzić wyrażenie regularne, pierwszy argument musi być pusty.
źródło
Ścieżka to nowa funkcja Django 2.0. Wyjaśniono tutaj: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
Wygląda bardziej pythonowo i włącz, aby nie używać wyrażeń regularnych w argumentach przekazywanych do widoku ... na przykład możesz użyć funkcji int ().
źródło
Od wersji 2.0 wielu użytkowników używa ścieżki, ale możemy użyć ścieżki lub adresu URL. Na przykład w django 2.1.1 mapowanie do funkcji poprzez adres url można wykonać w następujący sposób
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'), ]
gdzie posty to aplikacja, a post_home to funkcja w views.py
źródło