希望这是一个简单的菜鸟问题。我正在研究我的第一个大型(ish)Django项目。该项目的第一位工程师遵循默认的Django代码布局。随着事情的发展,我们最近将模型拆分到他们自己的目录中,每个模型只有一个文件。
是时候开始为观点做同样的事了。但是,我不希望/需要一次性完成这一切。我在处理它们时,我只想逐一将其从默认的views.py
移出。但是,我在urls.py
处理视图目录和views.py
当我尝试导入视图时,这是否会导致命名冲突?在我的urls.py
文件中?简单的回答只是呼叫"观点"我做过渡的其他事情?或者只是咬紧牙关并立即完成所有工作?
答案 0 :(得分:2)
我建议在Django项目的app文件夹中创建功能子目录。然后,只需使用app.views
命名空间使用from ... import *
命名空间从新目录中导入它们。这将导入任何未添加模块名称的视图(例如,app_name.views.feature_one.view_class
通常会引用的视图将变为app_name.views.view_class
,如您所愿。见下文:
# app_name/views.py
from feature_one.views import *
from feature_two.views import *
# ... copy views from here
# new file: app_name/feature_one/views.py
# ... paste some views here
# new file: app_name/feature_two/views.py
# ... paste some other views here
# new file: app_name/feature_one/__init__.py
# ... this file can be blank. required for importing "feature_one" like a module
# new file: app_name/feature_two/__init__.py
# ... this file can be blank. required for importing "feature_two" like a module
现在,虽然您的视图将分布在子目录中,但它们都会以相同的名称导入app_name.views
,因此尽管已将某些视图移至urls.py
,您仍可在{{1}}中引用相同的名称其他文件。
答案 1 :(得分:2)
直接答案是肯定的,你有一个python命名冲突。请参阅示例Python Import Class With Same Name as Directory
您不需要一次完成所有操作 - 您只需重命名/移动views.py文件或新的视图目录即可。移动新目录可能是最简单的,那么您将不会更改现有的URL路由。
views.py文件没有什么特别之处,只要你的urls.py指向适当的函数,就可以把它们放在任何地方,然后调用它们。
答案 2 :(得分:0)
由于您已将模型划分为子应用程序,因此您可以在创建的子目录中定义特定于这些子应用程序的URL,并设置URL层次结构。这是您的默认urls.py
的样子:
from django.conf.urls import include, patterns, url
urlpatterns = patterns('',
# ... snip ...
url(r'^comments/', include('your_website.comments.urls')),
url(r'^community/', include('your_website.community.urls')),
url(r'^contact/', include('your_website.contact.urls')),
# ... snip ...
)
其中评论,社区和联系人是您新创建的子应用程序/子目录。有关网址调度程序如何工作的更多信息,here