在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的最佳做法?一个文件?多个文件?等
谢谢。
答案 0 :(得分:15)
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)Per Django docs,“这段代码可以存在于您想要的任何地方,只要它在您的Python路径上。”我在app/views.py
答案 1 :(得分:6)
您可以根据需要导入任意数量的内容,但对象必须具有唯一的名称才能进行区分。
有几种方法可以解决这个问题。一种是简单地导入函数,而不是模块:
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,并在主urls.py中包含urlconf。
答案 2 :(得分:1)
我认为另一种选择是:
urlpatterns = patterns('mysite.books.views',
(r'^contact/$, 'contact'),
)
urlpatterns += patterns('mysite.contact.views',
(r'^search/$, 'search'),
)
如djangobook中所述。