gpt4 book ai didi

django - 根据 "Two Scoops of Django"在 Django 中存储静态/模板文件的位置

转载 作者:行者123 更新时间:2023-12-01 08:35:00 24 4
gpt4 key购买 nike

我是这本畅销书的读者和忠实粉丝 Two Scoops of Django .这本书充满了伟大的想法,但有一个我不太清楚。

作者建议在 Django 项目根目录中创建一个 static 和一个 templates 文件夹。
template 文件夹用于“站点范围的模板”(在 pag.24 中说明)。另外在 pag.162 他们说“模板通常应该放在 Django 项目的根文件夹中......唯一的异常(exception)是当你将应用程序捆绑到第三方包中时”。

他们没有在 ch.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

所以我们有 2 种不同的策略:一个独特的 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

最佳答案

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

Static file namespacing

Now we might be able to get away with putting our static files directly in my_app/static/ (rather than creating another my_app subdirectory), but it would actually be a bad idea. Django will use the first static file it finds whose name matches, and if you had a static file with the same name in a different application, Django would be unable to distinguish between them. We need to be able to point Django at the right one, and the easiest way to ensure this is by namespacing them. That is, by putting those static files inside another directory named for the application itself.

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

class app_directories.Loader

Loads templates from Django apps on the filesystem. For each app in INSTALLED_APPS, the loader looks for a templates subdirectory. If the directory exists, Django looks for templates in there.

This means you can store templates with your individual apps. This also makes it easy to distribute Django apps with default templates.

The Two Scoops of Django 是一本很棒的书。但是你应该先阅读官方文档。

关于django - 根据 "Two Scoops of Django"在 Django 中存储静态/模板文件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22924745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com