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

Dav*_*542 4 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),
)
Run Code Online (Sandbox Code Playgroud)

但是,除非我禁用其中一对,否则服务器会显示错误.所以我的问题有三个:

1)是否不可能有多个导入视图语句?2)如何解决这个问题?3)什么是放置所有views.py的最佳做法?一个文件?多个文件?等等

谢谢.

Pao*_*olo 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),
)
Run Code Online (Sandbox Code Playgroud)

3)根据Django文档,"这段代码可以存在于你想要的任何地方,只要它在你的Python路径上." 我保留了所有的应用程序视图app/views.py


Dan*_*man 6

您可以根据需要导入任意数量的内容,但对象必须具有唯一的名称才能进行区分.

有几种方法可以解决这个问题.一种是简单地导入函数,而不是模块:

from mysite.books.views import books
from mysite.contact.views import contact
Run Code Online (Sandbox Code Playgroud)

如果每个文件中只有一个或两个视图,这显然是好的.第二种选择是以不同的名称导入模块:

from mysite.books import views as books_views
from mysite.contact import views as contact_views
Run Code Online (Sandbox Code Playgroud)

第三个选项根本不是导入视图,而是使用字符串来引用它们:

urlpatterns = patterns('',
    (r'^contact/$', 'contact.views.contact'),
    (r'^search/$', 'book.views.search'),
)
Run Code Online (Sandbox Code Playgroud)

第四个是为每个应用程序分别使用urls.py,并在主urls.py中包含urlconf.