我已经开始从事一个项目,并决定学习 Django 来完成它。我完成了他们关于框架的基本教程,但我仍然不清楚模板、静态文件和媒体文件应该如何组织。 Django 指示像这样组织文件:
---Project
|---manage.py
|---db.sqlite3
|---site
| |---settings.py
| |---urls.py
| |---wsgi.py
|---app1
|---templates
| |---app1
| |---templatefiles...
|---static
|---app1
|---exampleDirectory(photos)
|---photo.jpg
我明白为什么我们在静态和模板目录中创建相同应用程序名称的子目录。这允许我们为模板/静态文件命名,并在我们的应用程序打包并在另一个具有相同名称的模板/文件的站点上使用时专门引用它们。我不明白的是两件事:
- 当我们在同一网站上构建两个需要访问相同模板、静态文件和媒体文件的应用程序时,我们该怎么办?
- 媒体根文件夹通常应该保存在哪里?
项目应该是这样的吗?
---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/