django - 请澄清 Django 媒体、静态和模板文件位置的约定

标签 django python-3.x

我已经开始从事一个项目,并决定学习 Django 来完成它。我完成了他们关于框架的基本教程,但我仍然不清楚模板、静态文件和媒体文件应该如何组织。 Django 指示像这样组织文件:

---Project
   |---manage.py
   |---db.sqlite3
   |---site
   |   |---settings.py
   |   |---urls.py
   |   |---wsgi.py
   |---app1
       |---templates
       |   |---app1
       |       |---templatefiles...
       |---static
           |---app1
               |---exampleDirectory(photos)
                   |---photo.jpg

我明白为什么我们在静态和模板目录中创建相同应用程序名称的子目录。这允许我们为模板/静态文件命名,并在我们的应用程序打包并在另一个具有相同名称的模板/文件的站点上使用时专门引用它们。我不明白的是两件事:

  1. 当我们在同一网站上构建两个需要访问相同模板、静态文件和媒体文件的应用程序时,我们该怎么办?
  2. 媒体根文件夹通常应该保存在哪里?

项目应该是这样的吗?

---Project
       |---manage.py
       |---db.sqlite3
       |---site
       |   |---settings.py
       |   |---urls.py
       |   |---wsgi.py
       |   |---templates
       |   |---media
       |   |---static
       |---app1
       |---app2

最佳答案

如果您有共享资源、静态/模板等,您可以将它们放入site应用程序或项目根目录中。

---Project
       |---manage.py
       |---db.sqlite3
       |---site
       |   |---settings.py
       |   |---urls.py
       |   |---wsgi.py
       |---app1
       |---app2
       |---static
       |---templates

对于 media 目录,您无需在本地和应用程序开发中担心这一点。该目录由 django 用于通过网站上传的文件,FileField 将上传到 MEDIA_ROOT 设置。因此,您在开发过程中不会在该路径中创建文件,所有文件都是静态的。

我认为将它们放在项目根目录中更有意义,以便共享基本模板可以存在于 Project/templates/base.html 中,并且您只需执行 {% extends来自您的模板的 base.html %}

这使事情变得简单且易于遵循。将 app static/html 捆绑到应用程序名称的文件夹中的另一个重要原因是,当 django 执行 collectstatic 时,应用程序的静态文件夹都会捆绑到静态根目录中,通常是一个名为 的文件夹>static-collection 或类似的。通过按应用程序名称拆分组合内容,您可以避免文件名称中的任何冲突,所有内容都可以有 style.css 而不会混淆等。

关于django - 请澄清 Django 媒体、静态和模板文件位置的约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54727459/

相关文章:

python - Django 。从查询集中删除 select_related

python - 使用Django的抽象类来进行简单的代码复用是否合适?

django - 使用 GenericForeignKey 与多表继承与 OneToOneField 的优缺点是什么?

python - 导入与系统模块同名的模块

python - 查找四个用户输入的最大数字

javascript - 如何通过 jinja[Flask] 访问外部 javascript 文件?

python - 导入错误: cannot import name RequestSite

python - 使用 Pytest 测试 Python 程序

python - 为什么只能从文本文件的开头到 `seek`?

python-3.x - 由于使用 Docker 的 PostgresDB 连接失败,无法启动 Apache Superset