Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

Подключение других схем URL

Если вы планируете использовать ваш код в нескольких 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 в первом наборе привязок, показывая, что вы можете смешивать подключаемые шаблоны со встроенными.

Как совпавшие параметры работают совместно с include()

Подключенный набор привязок получает любые параметры от родительского набора, например:

# 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 передаётся в подключенный набор привязок и, следовательно, в каждую функцию представления внутри этого набора.

Следует отметить, что захваченные параметры будут всегда передаваться каждой строке подключенного набора привязок, независимо от того, принимает ли представление в этой строке такие параметры. По этой причине, эта методика полезна только в случае, когда вы уверены, что каждое представление в подключенном наборе привязок может принять передаваемые параметры.

Как работают дополнительные параметры совместно с include()

Аналогично, вы можете передавать дополнительные параметры в наборе привязок в подключаемые наборы, подобно тому, как такие параметры передаются в обычное представление — в виде словаря. Как только вы сделаете это, каждая строка подключенного набора получит эти параметры.

Например, следующие два набора привязок функционально идентичны.

Первый:

# 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}),
)

Подобно случаю с захваченными параметрами (которые мы рассматривали ранее), дополнительные параметры будут всегда передаваться каждой строке подключенного набора привязок, независимо от того, может ли функция представления правильно обработать такие параметры. По этой причине, эта методика полезна только в случае, когда вы уверены, что каждое представление в подключенном наборе привязок может принять передаваемые параметры.



[11] См. предыдущий пример. Данный код подключается командой include('mysite.blog.urls').


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
1049 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID