Если вы планируете использовать ваш код в нескольких Django сайтах, вам следует переработать ваш файл со схемой URL таким образом, чтобы он позволял включать другие схемы.
В любом случае ваша схема может «подключать» другие схемы. По существу происходит «внедрение» набора URL после этой команды. Например:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^weblog/', include('mysite.blog.urls')),
(r'^photos/', include('mysite.photos.urls')),
(r'^about/$', 'mysite.views.about'),
)
Здесь есть важный момент: регулярные выражения в этом примере,
которые указывают на include()
не имеют символа $, но
имеют завершающий слэш. Когда Django
встречает include()
он отрезает совпавшую
часть от URL и отправляет оставшуюся часть в подключенные схемы
для дальнейшей обработки.
Продолжая работу над нашим примером [11] :
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^(\d\d\d\d)/$', 'mysite.blog.views.year_detail'),
(r'^(\d\d\d\d)/(\d\d)/$', 'mysite.blog.views.month_detail'),
)
Используя эти две схемы URL, покажем как будут обработаны тестовые запросы:
/weblog/2007/: В первом наборе привязок совпадёт шаблон r'^weblog/'. Так как для этого шаблона используется
include()
, Django отрежет совпавший текст, в данном случае это будет weblog/. Оставшаяся часть URL(т.е. 2007/) совпадёт с первым шаблоном в mysite.blog.urls./weblog//2007/: В первом наборе привязок совпадёт шаблон r'^weblog/'.Так как для этого шаблона используется
include()
, Django отрежет совпавший текст, в данном случае это будет weblog/. Оставшаяся часть URL (т.е./2007/, с ведущим слэшом) не совпадёт ни с одним шаблоном в mysite.blog.urls./about/: Этот запрос будет обработан представлением mysite.views.about в первом наборе привязок, показывая, что вы можете смешивать подключаемые шаблоны со встроенными.
Подключенный набор привязок получает любые параметры от родительского набора, например:
# root urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^(?P<username>\w+)/blog/', include('foo.urls.blog')),
)
# foo/urls/blog.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^$', 'foo.views.blog_index'),
(r'^archive/$', 'foo.views.blog_archive'),
)
В этом примере, захваченная переменная username
передаётся в подключенный набор привязок и, следовательно, в
каждую функцию представления внутри этого набора.
Следует отметить, что захваченные параметры будут всегда передаваться каждой строке подключенного набора привязок, независимо от того, принимает ли представление в этой строке такие параметры. По этой причине, эта методика полезна только в случае, когда вы уверены, что каждое представление в подключенном наборе привязок может принять передаваемые параметры.
Аналогично, вы можете передавать дополнительные параметры в наборе привязок в подключаемые наборы, подобно тому, как такие параметры передаются в обычное представление — в виде словаря. Как только вы сделаете это, каждая строка подключенного набора получит эти параметры.
Например, следующие два набора привязок функционально идентичны.
Первый:
# urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^blog/', include('inner'), {'blogid': 3}),
)
# inner.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^archive/$', 'mysite.views.archive'),
(r'^about/$', 'mysite.views.about'),
(r'^rss/$', 'mysite.views.rss'),
)
Второй:
# urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^blog/', include('inner')),
)
# inner.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^archive/$', 'mysite.views.archive', {'blogid': 3}),
(r'^about/$', 'mysite.views.about', {'blogid': 3}),
(r'^rss/$', 'mysite.views.rss', {'blogid': 3}),
)
Подобно случаю с захваченными параметрами (которые мы рассматривали ранее), дополнительные параметры будут всегда передаваться каждой строке подключенного набора привязок, независимо от того, может ли функция представления правильно обработать такие параметры. По этой причине, эта методика полезна только в случае, когда вы уверены, что каждое представление в подключенном наборе привязок может принять передаваемые параметры.
Пред. | Уровень выше | След. |
Глава 8. Усовершенствованные представления и схемы URL | Начало | Глава 9. Базовые представления |
0 comments | Make a comment