Splitting views.py
Most of your code probably expects your views to be accessible as myapp.views.viewname
. One way I've seen people break up their views but keep this python name is to create a views/
directory. views/__init__.py
will have:
from .foo_views import *
from .bar_views import *
from .baz_views import *
Then, in views/foo_views.py
, put:
def foo_detail(request, ...):
# your code here
def foo_list(request, ...):
# your code here
def your_other_view(...):
# ...
etc. So you move everything from views.py
into files in this directory, make __init__.py
, delete views.py
, and you're done.
Then, when you import myapp.views
, myapp.views.foo_detail
will refer to the function that you defined in views/foo_views.py
.
Splitting other modules
This strategy should also work fine for admin.py
, etc. But if you want to split up models.py
like this, you will need to add app_label = 'your_app_name'
to the class Meta:
of all of your models. For example, unicorn_app/models/unicorns.py
could have an entry like this:
class Unicorn(models.Model):
description = models.CharField(max_length=80)
class Meta:
app_label = 'unicorn_app'
(Otherwise, Django imagines that the Unicorn
model is part of a Django app named "models", which messes up the admin site. Current through 1.6 - the upcoming 1.7 release will remove this requirement.)