Разница между admin.site.root и admin.site.urls - PullRequest
2 голосов
/ 03 июня 2009

В Книге Джанго в главе 6 о сайте администратора, они говорят мне добавить следующий URL-шаблон к urls.py:

.
urlpatterns = patterns('',
    # ...
    (r'^admin/', include(admin.site.urls)),
    # ...
)

Но чтобы это работало в моей системе, мне пришлось раскомментировать следующую строку:

(r'^admin/(.*)', admin.site.root),

Может кто-нибудь объяснить мне, в чем различия?

Ответы [ 4 ]

7 голосов
/ 03 июня 2009

К сожалению, и у Габриэля, и у Антти все неправильно,

admin.site.root - это поведение версии 1.0. Если вы скачали 1.0 или 1.0.2, это то, что вы должны использовать.

Однако совсем недавно произошли некоторые изменения в обработке URL для администратора Django, которые являются частью еще не выпущенного 1.1. Это в первую очередь позволяет использовать функцию reverse () для поиска URL-адресов администратора. Поэтому, если вы недавно проверяли код, вам нужно будет использовать admin.site.urls.

Ваша ссылка на второе издание Книги Django, которая обновляется до версии 1.1 - и документы, на которые ссылается Габриэль, также относятся к текущей проверке с новой версией.

(Просто для полноты заметки, что версии Django до слияния newforms-admin, до версии 1.0, использовали admin.urls, а не admin.site.urls или admin.site.root.)

4 голосов
/ 09 марта 2011

Обратите внимание на следующее; Я боролся из-за того, что (. *) Был во второй записи ниже.

Работает, но не рекомендуется:

urlpatterns = Patterns ('',
(r '^ admin /(.*)', admin.site.root)), )

Неверно и частично работает:

urlpatterns = Patterns ('',
(r '^ admin /(.*)', включая (admin.site.urls)), )

Правильно и хорошо работает:

urlpatterns = Patterns ('', (r '^ admin /', include (admin.site.urls)), )

0 голосов
/ 03 июня 2009

из исходного кода для функции admin.site.root:

root (self, request, url): обрабатывает основную маршрутизацию URL для приложения администратора.

[...] метод может использоваться как Функция просмотра Django, которая представляет полный интерфейс администратора для коллекция зарегистрированных моделей.

0 голосов
/ 03 июня 2009

Книга Джанго говорит о версии 0.9.6. С тех пор админ был переписан. В Django 1.0 весь администратор обслуживается одним представлением (admin.site.root), которое внутренне анализирует остальную часть URL.

Сравните каталог admin 0.96.3 с каталогом , соответствующим 1.0.2 . В последнем нет urls.py.

...