Vin*_*ter 178
在Django中,一切都是Python模块(*.py).您可以使用__init__.py内部创建视图文件夹,但仍然可以导入视图,因为这也实现了Python模块.但是一个例子会更好.
您的原件views.py可能如下所示:
def view1(arg):
pass
def view2(arg):
pass
Run Code Online (Sandbox Code Playgroud)
使用以下文件夹/文件结构,它将工作相同:
views/
__init__.py
viewsa.py
viewsb.py
Run Code Online (Sandbox Code Playgroud)
viewsa.py :
def view1(arg):
pass
Run Code Online (Sandbox Code Playgroud)
viewsb.py :
def view2(arg):
pass
Run Code Online (Sandbox Code Playgroud)
__init__.py :
from viewsa import view1
from viewsb import view2
Run Code Online (Sandbox Code Playgroud)
在快速的解释是:当你写from views import view1的Python会寻找在厂景
views.py,这是在第一个(原始)案件中发生的事情
views/__init__.py,这是在第二种情况下发生的事情.在这里,__init__.py能够提供view1方法,因为它导入它.
使用这种解决方案,您可能无需更改import或urlpattern参数urls.py
如果每个新视图文件中有许多方法,您可能会发现views/__init__.py使用导入很有用*,如下所示:
from viewsa import *
from viewsb import *
Run Code Online (Sandbox Code Playgroud)
我实际上不知道速度问题(但我怀疑有没有).
对于模型,它可能有点困难.
Mez*_*Mez 20
我以前必须这样做(为了清楚起见)
我这样做的方法是创建一个views目录,然后在其中创建一个名为的文件__init__.py
现在,当你打电话给你时urls.py,你只需要添加另一部分
例如,之前您可能已经致电: -
url(r'^calendar/(?P<year>\d\d\d\d)/$', 'myproject.calendar.views.year')
url(r'^calendar/(?P<year>\d\d\d\d)/(?P<user>[a-z]+)/$', 'myproject.calendar.views.year_by_user')
Run Code Online (Sandbox Code Playgroud)
你现在可以调用一些东西
url(r'^calendar/(?P<year>\d\d\d\d)/$', 'myproject.calendar.views.year.index')
url(r'^calendar/(?P<year>\d\d\d\d)/(?P<user>[a-z]+)/$', 'myproject.calendar.views.year.user')
Run Code Online (Sandbox Code Playgroud)
当然,这是假设您已views/year.py包含函数index和user;)
基本上,您可以根据需要放置代码.只需确保,您可以相应地更改导入语句,例如,对于视图中的视图urls.py.
不知道你的实际代码很难建议有意义的东西.也许你可以使用某种类型的文件名前缀,例如views_helper.py,views_fancy.py,views_that_are_not_so_often_used.py或使...
另一种选择是使用a创建一个views目录__init__.py,您可以在其中导入所有子视图.如果您需要大量文件,则可以在视图增长时创建更多嵌套子视图...
仅仅为了分享,我对Vincent Demeester的回答有些疑问.一切都很好,除了在init .py文件中,我必须这样写:
__init__.py:
from .viewsa import *
from .viewsb import *
Run Code Online (Sandbox Code Playgroud)
这样我仍然不需要import在urls.py中更改我的方法.我在Python 3.6.1和Django 1.11.4上.
简单回答:是的.
最好是创建一个名为views的目录,然后在你的urls.py中执行:
import views
...
url(r'^classroom$', views.school.klass, name="classroom"),
Run Code Online (Sandbox Code Playgroud)