一个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
\d+)/$’,BlogDetail.as_view(),name=‘blog_detail’),
…
url(r’^user/list/$’,UserList.as_view(),name=‘user_list’),
url(r’^user/(?P\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的冲突。
领取专属 10元无门槛券
私享最新 技术干货