根据“Django的两个勺子”在Django中存储静态/模板文件的位置

时间:2014-04-07 23:07:23

标签: django django-templates django-staticfiles

我是一位读者,也是热门书籍Two Scoops of Django的忠实粉丝。 这本书充满了很棒的想法,但有一个对我来说并不清楚。

作者建议在Django项目根目录中创建statictemplates文件夹。
template文件夹适用于"网站范围的模板" (见第24页)。 另外在第162页,他们说"模板通常应该进入Django项目的根文件夹...唯一的例外是当你将应用程序捆绑到第三方软件包时#34;。

他们在第12章中没有明确提到它,但我想在templates根目录中为每个应用程序(与应用程序同名)创建一个文件夹是很好的。
让我们假设在我的icecreamratings Django项目中我有2个应用程序:

  • flavors包含2个模板:new_flavor.html和details.html
  • profiles,包含1个模板:details.html 所有模板都继承自base.html

我猜他们会建议以下结构:

icecreamratings_project/
  |-- ...
  |-- icecreamratings/  # Django project root
        |-- ...
        |-- static/
        |-- templates/
              |-- 404.html
              |-- 500.html
              |-- base.html
              |-- flavors/  # same name as app flavor
              |     |-- new_flavor.html
              |     |-- details.html
              |-- profiles/  # same name as app profiles
                    |-- details.html

我说得对吗?

另一方面,Django official docs建议在每个应用中创建一个static文件夹,并在其中创建一个与应用名称相同的子文件夹,例如:my_app/static/my_app/myimage.jpg

所以我们有两种不同的策略:一个独特的template文件夹和许多static个文件夹(每个应用程序中有一个)。 有两种不同的策略显然是一个糟糕的选择。

那么,您如何看待在每个应用中存储templatestatic文件夹? 像这样:

icecreamratings_project/
  |-- ...
  |-- icecreamratings/  # Django project root
        |-- ...
        |-- static/  # site-wide static files
        |     |-- bootstrap/  # bootstrap source files
        |     |-- jquery/  # jquery source files
        |     |-- css/  # css files used by base.html (and others in templates root)
        |     |-- js/  # javascript files used base.html (and others in templates root)
        |     |-- img/  # img files files used base.html (and others in templates root)
        |-- templates/  # site-wide templates
        |     |-- 404.html
        |     |-- 500.html
        |     |-- base.html
        |-- flavors/  # an app
              |-- static/
              |     |-- flavors/  # static files specific for this app
              |           |-- css/  # css files for flavor app templates
              |           |-- js/  # javascript files for flavor app templates
              |           |-- img/  # img files for flavor app templates
              |-- templates/  # template files specific for this app
                    |-- new_flavor.html
                    |-- details.html

1 个答案:

答案 0 :(得分:1)

django官方文档不建议您在每个应用中创建静态文件夹。相反,它更喜欢将静态目录存储在项目目录下。

Static file namespacing

  

现在我们可以放弃我们的静态文件   直接在my_app / static /中(而不是创建另一个my_app   子目录),但实际上这是一个坏主意。 Django将使用   找到名字匹配的第一个静态文件,如果有的话   Django在不同的应用程序中具有相同名称的静态文件   将无法区分它们。我们需要能够   将Django指向正确的位置,这是确保实现这一目标的最简单方法   通过命名它们。 即将这些静态文件放入其中   另一个为应用程序本身命名的目录。

官方文档也回答了关于模板结构的问题。

class app_directories.Loader

  

从文件系统上的Django应用程序加载模板。 对于每个应用程序   INSTALLED_APPS,加载器查找模板子目录。 If   该目录存在,Django在那里寻找模板。

     

这意味着您可以使用各个应用程序存储模板。这个   还可以使用默认模板轻松分发Django应用程序。

Django的两个独家新闻是一本好书。但是你应该先阅读官方文件。