2011-04-28 57 views
4

多次在Django中,是不可能有从urls.py多个视图的进口?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

顺便说一句,你会得到哪个错误? – Paolo 2011-04-28 18:11:06

+0

这不是django,而是python! – vad 2011-04-28 18:45:53

+0

这只是一个命名问题。如果你有两个孩子给他们一个相同的名字,你也不知道如何做出改变,如果你只是想打电话给他们其中的一个。 Python也是这样,在这种情况下,它使用你定义的第二个'views'(覆盖第一个)。 – 2011-04-29 02:22:26

回答

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

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,并将urlconf包含在主要的urls.py中。

+0

谢谢您的全面回应。 “如果你在每个文件中只有一个或两个视图,这显然是很好的”,你是什么意思?使用这种方法获得大量视图的缺点是什么? – David542 2011-04-28 18:24:25

+0

只是你需要单独导入它们。 – 2011-04-28 18:35:41

1

我认为,另一种选择是:

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

djangobook描述。