Django在urls.py中多次导入视图

时间:2011-04-28 18:00:10

标签: django

在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 个答案:

答案 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中所述。