Dalam kursus online Django, instruktur meminta kami menggunakan url()
fungsi untuk memanggil tampilan dan memanfaatkan ekspresi reguler dalam daftar urlpatterns. Saya telah melihat contoh lain di youtube ini. misalnya
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"),
]
Namun, dalam menjalani tutorial Django, mereka menggunakan path()
sebagai contoh:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
Selain itu, ekspresi reguler tampaknya tidak berfungsi dengan path()
fungsi karena menggunakan path(r'^$', views.index, name="index")
tidak akan menemukan mysite.com/polls/
tampilan.
Apakah menggunakan path()
tanpa mencocokkan regex cara yang tepat untuk maju? Apakah url()
lebih kuat tetapi lebih rumit sehingga mereka gunakan path()
untuk memulai kita? Atau apakah ini merupakan kasus alat yang berbeda untuk pekerjaan yang berbeda?
python
django
django-urls
FrostedCookies
sumber
sumber
path()
danurl()
. Jika Anda ingin atau perlu menggunakan regex, maka Anda harus menggunakanre_path()
atauurl()
. Di luar itu, saya pikir itu terserah Anda mana yang Anda pilih.Jawaban:
Dari dokumentasi Django untuk url
Perbedaan utama antara
path
danre_path
adalah yangpath
menggunakan rute tanpa regexAnda dapat menggunakan
re_path
untuk panggilan regex yang kompleks dan hanya menggunakanpath
untuk pencarian yang lebih sederhanasumber
re_path
adalah apa yang saya cari saat itu.Fungsi baru ini
django.urls.path()
memungkinkan sintaks perutean URL yang lebih mudah dibaca. Misalnya, contoh ini dari rilis Django sebelumnya:dapat ditulis sebagai:
The
django.conf.urls.url()
fungsi dari versi sebelumnya sekarang tersedia sebagaidjango.urls.re_path()
. Lokasi lama tetap untuk kompatibilitas ke belakang, tanpa penghentian segera. Fungsi lamadjango.conf.urls.include()
sekarang dapat diimpor daridjango.urls
sehingga Anda dapat menggunakan:di URLconfs . Untuk membaca lebih lanjut, django doc
sumber
path()
contoh Anda memungkinkan angka non-empat digit./<int:year>/
menandakan bahwa tahun harus dalam bilangan bulat, saya sarankan Anda melihat dokumentasi resmi.int
tidak setara dengan[0-9]{4}
. Apakah digunakan untuk bilangan bulat atau tidak, tidak ada hubungannya dengan hubungan ini. Mungkin jika Anda mengganti[0-9]{4}
dengan[0-9]+
perbandingan Anda mungkin kurang akurat, meskipun Anda mungkin masih perlu berurusan dengan jenis hasil akhir (str vs int?).path
hanya baru di Django 2.0, yang hanya dirilis beberapa minggu yang lalu. Sebagian besar tutorial tidak akan diperbarui untuk sintaks baru.Itu tentu saja seharusnya menjadi cara yang lebih sederhana dalam melakukan sesuatu; Saya tidak akan mengatakan bahwa URL lebih kuat, Anda harus dapat mengekspresikan pola dalam format apa pun.
sumber
Ekspresi reguler tampaknya tidak bekerja dengan
path()
fungsi dengan argumen berikut:path(r'^$', views.index, name="index")
.Ini harus seperti ini:
path('', views.index, name="index")
.Argumen 1 harus kosong untuk memasukkan ekspresi reguler.
sumber
Path adalah fitur baru Django 2.0. Dijelaskan di sini: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
Terlihat seperti cara yang lebih pythonic, dan memungkinkan untuk tidak menggunakan ekspresi reguler dalam argumen yang Anda berikan untuk dilihat ... Anda dapat menggunakan fungsi int () sebagai contoh.
sumber
Dari v2.0 banyak pengguna menggunakan jalur, tetapi kita bisa menggunakan jalur atau url. Sebagai contoh dalam pemetaan 2.1.1 untuk fungsi melalui url dapat dilakukan sebagai berikut
di mana posting adalah aplikasi & post_home adalah fungsi di views.py
sumber