Django импортирует просмотры несколько раз в urls.py - PullRequest
4 голосов
/ 28 апреля 2011

В Django невозможно импортировать несколько представлений из urls.py?

Например, у меня есть следующий код в urls.py:

from mysite.books import views
from mysite.contact import views

urlpatterns = patterns('',
    (r'^contact/$', views.contact),
    (r'^search/$', views.search),
)

Однако сервер отображает ошибку, если я не отключу одну из пар. Так что мои вопросы тройные:

1) Разве нельзя иметь несколько операторов представления импорта? 2) Как обойти это? 3) Как лучше всего разместить все ваши views.py? Один файл? Несколько файлов? и т.д.

Спасибо.

Ответы [ 3 ]

15 голосов
/ 28 апреля 2011

1) Да, это так.

2)

from mysite.books import views as books_views
from mysite.contact import views as contact_views

urlpatterns = patterns('',
    (r'^contact/$', contact_views.contact),
    (r'^search/$', books_views.search),
)

3) Согласно Django docs , «Этот код может жить где угодно, если он находится на вашем пути Python». Я сохраняю все просмотры приложения в app/views.py

6 голосов
/ 28 апреля 2011

Вы можете импортировать столько вещей, сколько хотите, но объекты должны иметь уникальные имена, чтобы их можно было различать.

Есть несколько способов справиться с этим. Один из них - просто импортировать функции, а не модуль:

from mysite.books.views import books
from mysite.contact.views import contact

Это, очевидно, только хорошо, если у вас есть только один или два представления в каждом файле. Второй вариант - импортировать модули под разными именами:

from mysite.books import views as books_views
from mysite.contact import views as contact_views

Третий вариант - вообще не импортировать представления, а использовать для их ссылки строки:

urlpatterns = patterns('',
    (r'^contact/$', 'contact.views.contact'),
    (r'^search/$', 'book.views.search'),
)

Четвертый - иметь отдельный urls.py для каждого приложения и включать urlconfs в основной urls.py.

1 голос
/ 03 мая 2013

Я думаю, что другой вариант будет:

urlpatterns = patterns('mysite.books.views',
    (r'^contact/$, 'contact'),
)
urlpatterns += patterns('mysite.contact.views',
    (r'^search/$, 'search'),
)

как описано в djangobook .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...