Django url
Ми збираємося побудувати нашу першу веб сторінку -- домашню сторінку для вашого блогу! Але спочатку, давайте трохи дізнаємось про Django url.
Що таке URL?
URL -- це просто веб адреса. Ви можете побачити URL кожен раз коли відвідуєте будь-який веб сайт, він видимий в браузерному адресному рядку (так! 127.0.0.1:8000 це URL! І http://djangogirls.com також є URL):
Кожна сторінка в Інтернеті потребує свого власного URL. Таким чином ваш додаток знає, що треба показувати користувачу, який відкриває URL. В Django використовується певний елемент, що називається URLconf
(URL configuration), котрий є набором шаблонів, яким Django намагатиметься відповідати за допомогою отриманого URL щоб віднайти необхідне відображення.
Як працює URL в Django?
Відкриємо файл mysite/urls.py
і подивимось як він виглядає:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
]
Як бачите, Django вже щось записав сюди для нас.
Рядки, що починаються з #
це коментарі, тобто ці рядки не будуть запускатися Python. Досить зручно, чи не так?
URL адміністратора, котрий ви відвідували у попередньому розділі вже є тут:
url(r'^admin/', include(admin.site.urls)),
Це означає, що для кожного URL, що починається з admin/
Django знаходитиме відповідне відображення - view. У даному випадку ми включаємо багато адміністраторських URL, отже не все запаковується в цей маленький файл, що є більш читабельним і акуратнішим.
Regex
Хіба вам не цікаво яким чином Django створює відповідності між URL і відображеннями? Гаразд, ця частина досить хитра. Django використовує regex
-- регулярні вирази. Regex має багато (багато!) правил, що формують шаблон пошуку. Досить не просто для розуміння, отже не будемо турбуватись про це наразі, а дізнатись про них ви, однозначно, зможете потім. А зараз будемо користуватися лише тими правилами, які нам будуть необхідні.
Наведемо простий приклад лише для того, щоб на залишити вас у тупиковому положенні на цьому реченні: уявіть, що у вас є сайт із адресою: http://www.mysite.com/post/12345/
, де 12345
-- номер вашого поста. Написання окремих відображень для усіх номерів постів було б дійсно нестерпно. Django спрощує цей момент дозволяючи писати http://www.mysite.com/post/<a number>/
. Django потурбується про решту!
Ваш перший Django url!
Час створити наш перший URL! Ми хочемо, щоб http://127.0.0.1:8000/ був домашньою сторінкою нашого блогу і виводив список постів.
Також ми б хотіли підтримувати порядок у файлі mysite/urls.py
, отже імпортуємо url з нашого додатку blog
у файл mysite/urls.py
.
Вперед, видаліть закоментовані рядки (рядки, що починаються з #
) та додайте рядок, що імпортує blog.urls
до головного url (''
).
Ваш файл mysite/urls.py
повинен наразі мати такий вигляд:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'', include('blog.urls')),
]
Django тепер перенаправлятиме усе, що надходить на http://127.0.0.1:8000/ до blog.urls
і шукатиме там подальші інструкції.
blog.urls
Створіть новий пустий файл blog/urls.py
. Добре! Додайте наступні перші два рядки:
from django.conf.urls import include, url
from . import views
Тут ми лише імпортуємо методи Django і всі наші відображення з додатку blog
(у нас ще немає жодного, але ми повернемося до цього через хвилину!)
Після цього, ми можемо додати наш перший URL шаблон:
urlpatterns = [
url(r'^$', views.post_list),
]
Як бачите, ми присвоюємо відображення із назвою post_list
значенню URL ^$
. Але що означає ^$
? Це магія регулярних виразів :) Давайте розберемось по порядку: - ^
в регулярному виразі означає "початок"; з цього знаку ми можемо розпочати пошук нашого шаблону - $
відповідає лише "закінченню" рядка, що означає, що ми будемо тут завершувати наш пошук
Якщо ви застосуєте ці два знаки разом, виглядатиме на те, що ми шукаємо пустий рядок! І це правильно, тому що в Django url розпізнавачах (url resolvers), http://127.0.0.1:8000/ не є частиною URL. Цей шаблон показуватиме Django, що views.post_list
є правильним місцем для переходу, якщо хтось введе ваш сайт за адресою http://127.0.0.1:8000/.
Усе гаразд? Відкрийте http://127.0.0.1:8000/ у браузері, щоб побачити результат.
Що, тут більше немає повідомлення "It works"? Не хвилюйтесь, це просто сторінка із помилкою, нічого боятися! Вони є насправді дуже корисними:
Можете прочитати тут: no attribute 'post_list'. Чи post_list не нагадує вам про щось? Це назва нашого відображення! Це означає, що усе на місці, ми просто ще не створили відповідне відображення. Не переймайтесь, ми його отримаємо.
Якщо бажаєте дізнатися більше про Django URLconf, зверніться до офіційної документації: https://docs.djangoproject.com/en/1.8/topics/http/urls/