一个Django项目(Project)通常包含多个应用(App)。项目里除了有Python的.py文件, 设置文件setting.py,还有html模板(base.html和page.html),静态文件 (static files如CSS和js)及媒体文件(media)。当我们有这么多文件和文件夹时,我们整个项目的文件夹和文件应该怎么布局才清晰合理?小编我就带你来看一看如何合理地布局Django项目文件夹与文件。如果你喜欢本文,欢迎关注我们的微信公众号【Python与Django大咖之路】。本文参考了Frank Wiles所写的Recommended Django Project Layout。
推荐的Django项目文件夹与文件布局
假设我们有个叫myproject的Django项目,里面包含了2个Web应用(app), 一个是blog, 一个是user, 那么整个项目推荐性的文件夹与文件布局应该是这样子的。
myproject/
manage.py
myproject/
__init__.py
urls.py
wsgi.py
settings/
__init__.py
base.py
dev.py
prod.py
blog/
__init__.py
models.py
managers.py
views.py
urls.py
templates/
blog/
base.html
list.html
detail.html
static/
…
tests/
__init__.py
test_models.py
test_managers.py
test_views.py
users/
__init__.py
models.py
views.py
urls.py
templates/
users/
base.html
list.html
detail.html
static/
…
tests/
__init__.py
test_models.py
test_views.py
static/
css/
…
js/
…
templates/
base.html
index.html
requirements/
base.txt
dev.txt
test.txt
prod.txt
这么做最大的好处能提高每个app的重用性。比如我们把每个app的template和static静态文件夹都放在每个app的名字下面。这样每个app就可以独立运行。对属于全站的templates和static文件(比如主页),我们都放在app文件夹外。另外我们建立了一个myproject下建立了requirements文件夹,方便用户和读者了解该项目对第三方package的依赖。
推荐性的URL设置
对于整个项目的URL文件myproject/urls.py,我们不建议按下面方式写:
urlpatterns = [
url(r’^$’, HomePageView.as_view(), name=‘home’),
url(r’^blog/$’, BlogList.as_view(), name=‘blog_list’),
url(r’^blog/(?P<pk>\d+)/$’, BlogDetail.as_view(), name=‘blog_detail’),
…
url(r’^user/list/$’, UserList.as_view(), name=‘user_list’),
url(r’^user/(?P<username>\w+)/$’, UserDetail.as_view(), name=‘user_detail’),
]
我们建议这样写。总的URL里, 包含每个app的urls.py文件。这样写更清晰。
urlpatterns = [
url(r’^$’, HomePageView.as_view(), name=‘home’),
url(r’^blog/‘, include(‘blog.urls’)),
url(r’^user/‘, include(‘user.urls’)),
]
模板文件的正确位置
对于html模板文件,我们建议放在app/templates/app/文件夹里,而不是简单放在app/templates/里。看似我们多加了一层文件夹使问题复杂化了,但这样做实际上更安全。这与Django查找模板文件的方法有关。因为我们多加了一层app,这样Django只会查找app文件夹里的模板文件。在views.py里我们也建议通过app/template_name.html调用template,这样会杜绝与其它同名template的冲突。
如果喜欢我们的文章,欢迎关注我们的微信公众号【Python与Django大咖之路】。Django教程与实例每日更新,带你学习带你飞。