2014-02-05 94 views
1

希望这是一个简单的noob问题。我正在研究我的第一个大型(ish)Django项目。该项目的第一位工程师遵循默认的Django代码布局。随着事态的发展,我们最近将模型分成了自己的目录,每个模型只有一个文件。Django - 将视图拆分为单独的文件,同时保持views.py

现在该开始对视图执行相同操作了。但是,我不想/需要一口气做到这一切。我想在开始工作时,将它们逐一从默认的views.py中移出。但是,我有困难得到urls.py既具有views目录和views.py

这只是要引起命名冲突,当我尝试在我urls.py文件导入“若干意见”的工作?简单的答案只是在我进行转换时将其他视图称为“视图”?或者只是咬紧牙关,一下子做好一切?

回答

2

直接的答案是肯定的,你有一个python命名冲突。例如参见Python Import Class With Same Name as Directory

您不需要像以前那样做所有事情 - 您只需重命名/移动您的views.py文件或您的新视图目录即可。移动新的目录可能是最简单的,那么你将不会改变你现有的网址路线。

views.py文件没有什么特别的地方,只要你的urls.py指向适当的函数,你可以把它们放在任何地方,然后调用它们。

+0

谢谢,那是我正在寻找的确认。 –

2

我建议在您的Django项目的应用程序文件夹中创建功能子目录。然后,只需使用from ... import *咒语,使用app.views命名空间从新目录中导入它们即可。这将导入任何视图,而不需要预先指定模块名称(例如,通常会被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相同的名称尽管已经移动了一些看法到其他文件。

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 ... 
) 

哪里评论,社区和联系人是新创建的子应用程序/子目录。有关url调度程序如何工作的更多信息,here

相关问题