Mapowanie odnośników na widoki
14 July 2008
Comments
Plik urls.py zawiera listę mapującą URLe do konkretnych widoków korzystając z wyrażeń regularnych. "URL dispatcher" bo tak to się w pełni nazywa posiada oprócz samego mapowania inne możliwości.Oto przykładowy URLConf:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^articles/2003/$', 'news.views.special_case_2003'),
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
)
- /articles/2005/03/ dopasuje się do trzeciej reguły
- /articles/2003/ do pierwszej (a nie do drugiej, gdyż dopasowywanie zaczyna się po kolei od początku "listy")
Zmienne o określonej nazwie
Powyższy przykład zawiera zmienne (wyrażenia regularne) lecz nie przypisuje im konkretnych nazw. W przypadku bardziej złożonych aplikacji i URLi nazywanie wszystkich zmiennych w URLach to konieczność. Oto przykład:urlpatterns = patterns('',
(r'^articles/2003/$', 'news.views.special_case_2003'),
(r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'),
(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive'),
(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d+)/$', 'news.views.article_detail'),
)
Prefiksy Widoków
W powyższych przykładach wszędzie podajemy "projekt.aplikacja.views", co stanowi nadmiar literek... Możemy podać prefiks widoków:from django.conf.urls.defaults import *
urlpatterns = patterns('projekt.aplikacja.views',
(r'^articles/(\d{4})/$', 'year_archive'),
(r'^articles/(\d{4})/(\d{2})/$', 'month_archive'),
(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'),
)
from django.conf.urls.defaults import *
urlpatterns = patterns('django.views.generic.date_based',
(r'^/?$', 'archive_index'),
(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$','archive_month'),
)
urlpatterns += patterns('weblog.views',
(r'^tag/(?P<tag>\w+)/$', 'tag'),
)
Ładowanie URLconfów
Możliwe jest np. stworzenie plików urls.py dla wybranych aplikacji i dołączanie ich w głównym urls.py:from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^weblog/', include('django_website.apps.blog.urls.blog')),
(r'^documentation/', include('django_website.apps.docs.urls.docs')),
(r'^comments/', include('django.contrib.comments.urls.comments')),
)
Przekazywanie dodatkowych zmiennych do widoków
Do widoku można przekazać dodatkowe zmienne dodając trzeci parametr:urlpatterns = patterns('blog.views',
(r'^/blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}),
)
Najczęściej używane wyrażenia regularne
(?P<slug>[\w\-_]+) - dla wartości pochodzących ze slugField (liczby, litery, myślnik, podkreślenie)
(?P<liczba>(\d+)) - wartości liczbowe
RkBlog
Comment article