Django - Pemetaan URL

Sekarang kita memiliki tampilan kerja seperti yang dijelaskan di bab sebelumnya. Kami ingin mengakses tampilan itu melalui URL. Django mempunyai caranya sendiri untuk pemetaan URL dan itu dilakukan dengan mengedit file url.py proyek Anda(myproject/url.py). File url.py terlihat seperti -

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
)

Ketika seorang pengguna membuat permintaan untuk halaman pada aplikasi web Anda, pengontrol Django mengambil alih untuk mencari tampilan terkait melalui file url.py, dan kemudian mengembalikan respon HTML atau kesalahan 404 tidak ditemukan, jika tidak ditemukan. Di url.py, hal terpenting adalah"urlpatterns"tupel. Di sinilah Anda menentukan pemetaan antara URL dan tampilan. Pemetaan adalah tupel dalam pola URL seperti -

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
   url(r'^hello/', 'myapp.views.hello', name = 'hello'),
)

Garis yang ditandai memetakan URL "/ home" ke tampilan hello yang dibuat di file myapp / view.py. Seperti yang Anda lihat di atas, pemetaan terdiri dari tiga elemen -

  • The pattern- Ekspresi reguler yang cocok dengan URL yang ingin Anda selesaikan dan petakan. Segala sesuatu yang dapat bekerja dengan modul python 're' memenuhi syarat untuk pola (berguna ketika Anda ingin mengirimkan parameter melalui url).

  • The python path to the view - Sama seperti saat Anda mengimpor modul.

  • The name- Untuk melakukan pembalikan URL, Anda harus menggunakan pola URL bernama seperti yang dilakukan pada contoh di atas. Setelah selesai, cukup jalankan server untuk mengakses tampilan Anda melalui: http: //127.0.0.1/hello

Mengatur URL Anda

Sejauh ini, kami telah membuat URL dalam file “myprojects / url.py”, namun seperti yang dinyatakan sebelumnya tentang Django dan membuat aplikasi, poin terbaik adalah dapat menggunakan kembali aplikasi dalam proyek yang berbeda. Anda dapat dengan mudah melihat apa masalahnya, jika Anda menyimpan semua URL Anda di file “projecturl.py”. Jadi praktik terbaik adalah membuat "url.py" per aplikasi dan memasukkannya ke dalam proyek utama file url.py (kita sudah memasukkan URL admin untuk antarmuka admin sebelumnya).

Bagaimana cara melakukannya?

Kita perlu membuat file url.py di myapp menggunakan kode berikut -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('', url(r'^hello/', 'myapp.views.hello', name = 'hello'),)

Kemudian myproject / url.py akan berubah menjadi berikut -

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
   url(r'^myapp/', include('myapp.urls')),
)

Kami telah memasukkan semua URL dari aplikasi myapp. Home.html yang diakses melalui “/ hello” sekarang menjadi “/ myapp / hello” yang merupakan struktur yang lebih baik dan lebih mudah dipahami untuk aplikasi web.

Sekarang mari kita bayangkan kita memiliki tampilan lain di myapp "pagi" dan kita ingin memetakannya di myapp / url.py, kita kemudian akan mengubah myapp / url.py kita menjadi -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
   url(r'^hello/', 'myapp.views.hello', name = 'hello'),
   url(r'^morning/', 'myapp.views.morning', name = 'morning'),
)

Ini dapat difaktorkan ulang menjadi -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),)

Seperti yang Anda lihat, kami sekarang menggunakan elemen pertama kami urlpatternstupel. Ini dapat berguna ketika Anda ingin mengubah nama aplikasi Anda.

Mengirim Parameter ke Tampilan

Kita sekarang tahu bagaimana memetakan URL, bagaimana mengaturnya, sekarang mari kita lihat bagaimana mengirim parameter ke tampilan. Contoh klasik adalah contoh artikel (Anda ingin mengakses artikel melalui “/ articles / article_id”).

Meneruskan parameter dilakukan dengan menangkapnya dengan regexpdi pola URL. Jika kita memiliki tampilan seperti berikut ini di “myapp / view.py”

from django.shortcuts import render
from django.http import HttpResponse

def hello(request):
   return render(request, "hello.html", {})

def viewArticle(request, articleId):
   text = "Displaying article Number : %s"%articleId
   return HttpResponse(text)

Kami ingin memetakannya di myapp / url.py sehingga kami dapat mengaksesnya melalui “/ myapp / article / articleId”, kami membutuhkan yang berikut di “myapp / url.py” -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),)

Ketika Django akan melihat url: "/ myapp / article / 42" itu akan meneruskan parameter '42' ke tampilan viewArticle, dan di browser Anda, Anda akan mendapatkan hasil berikut -

Perhatikan bahwa urutan parameter penting di sini. Misalkan kita menginginkan daftar artikel dari satu bulan dalam setahun, mari tambahkan tampilan viewArticles. View.py kita menjadi -

from django.shortcuts import render
from django.http import HttpResponse

def hello(request):
   return render(request, "hello.html", {})

def viewArticle(request, articleId):
   text = "Displaying article Number : %s"%articleId
   return HttpResponse(text)

def viewArticle(request, month, year):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

Yang sesuai url.py file akan terlihat seperti -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
   url(r'^articles/(\d{2})/(\d{4})', 'viewArticles', name = 'articles'),)

Sekarang ketika Anda pergi ke "/ myapp / artikel / 12/2006 /" Anda akan mendapatkan 'Menampilkan artikel dari: 2006/12' tetapi jika Anda membalikkan parameter Anda tidak akan mendapatkan hasil yang sama.

Untuk menghindarinya, dimungkinkan untuk menautkan parameter URL ke parameter tampilan. Untuk itu, kamiurl.py akan menjadi -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
   url(r'^articles/(?P\d{2})/(?P\d{4})', 'viewArticles', name = 'articles'),)