如何合理地布局Django项目文件夹与文件 - Django入门必读

时间:2024-04-06 16:30:21

一个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教程与实例每日更新,带你学习带你飞。

如何合理地布局Django项目文件夹与文件 - Django入门必读