Django - 在保持views.py的同时将视图拆分为单独的文件

时间:2014-02-05 16:49:57

标签: django django-views

希望这是一个简单的菜鸟问题。我正在研究我的第一个大型(ish)Django项目。该项目的第一位工程师遵循默认的Django代码布局。随着事情的发展,我们最近将模型拆分到他们自己的目录中,每个模型只有一个文件。

是时候开始为观点做同样的事了。但是,我不希望/需要一次性完成这一切。我在处理它们时,我只想逐一将其从默认的views.py移出。但是,我在urls.py处理视图目录和views.py

时遇到了困难

当我尝试导入视图时,这是否会导致命名冲突?在我的urls.py文件中?简单的回答只是呼叫"观点"我做过渡的其他事情?或者只是咬紧牙关并立即完成所有工作?

3 个答案:

答案 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