我应该如何在Django中构建我的静态应用程序文件?

时间:2016-01-06 15:00:46

标签: django

我正在寻找有关如何构建我的Django项目的建议。这是我目前的结构:

project_name
  - deploy
  - app_name
    -- migrations
    -- templates
    -- templatetags
    -- __init__.py
    -- admin.py
    -- context_processors.py
    -- defaults.py
    -- models.py
    -- tests.py
    -- views.py
  - static
    -- admin
    -- app_name
      --- css
      --- fonts
      --- img
      --- js
      --- tinymce
  - templates
  - project_name
  - __init__.py
  - fabfile.py
  - manage.py

我想知道在我的app文件夹中包含所有静态文件是否更好,或者它们是否应该像在静态文件夹和app_name中那样?

或者它是构建静态文件的另一种更好的方法吗?

2 个答案:

答案 0 :(得分:3)

将它们放在应用程序目录下名为“static”的目录中。这就是django.contrib.staticfiles.finders.AppDirectoriesFinder寻找by default的地方。

static/目录中,使用您的应用名称创建一个目录。

因此,在部署时,当您运行./manage.py collectstatic时,Django会将所有文件复制到settings.STATIC_ROOT中定义的目录中,并且每个应用程序都将其文件放在其自己的子目录中。

project_name
- deploy
- app_name
  - migrations
  ...
  - static
    - app_name
      - css
      - fonts
      - img
      - js
      - tinymce
  - templates
    - app_name
      - item.html
      - list.html
- project_name
- __init__.py
- manage.py

此外,根据您拥有的字体,CSS和JS文件的数量,我只需将它们放在app_name/static/app_name/内,而不是创建另一个目录级js/css/。正如他们所说,“扁平比嵌套更好”。

答案 1 :(得分:2)

如果您的所有观点都与静态文件有关,请遵循经验法则:

  • 如果它们特定于您的应用程序,请将它们放入您的应用程序
  • 把它们放在一个依赖项中(比如,你应该在你的django项目中安装另一个应用程序,虽然这个概念不是由Django强制实施的,如果你打算通过Python包管理系统(比如setuptools)强制执行它)如果您的资产是您拥有的许多django应用程序的全球资源,请发布您的django应用程序。您还应该发布(如果是这种情况)并在django项目中安装依赖项(否则无法访问文件)。
  • 将它们放在项目的全局静态目录中,如果它们仅特定于项目。

它们只是提示,但是最常练的提示。只要路径可以通过Django staticfiles加载器访问,您就可以将它们放在您想要的位置。