非常感谢@Simeon Visser 的回答所花费的时间,那里有一些非常有用的信息,但这并不完全是我想要的。所以我四处打听,并让 reddit 的 sinister_user_name 对此表示感谢,我认为这可能对其他人有所帮助:
静态文件在最近的版本中发生了相当大的变化,所以旧博客可能有点乱。
我试一试:
在您的模板中,您可以使用static_url
标签,django 将为您填写路径。
<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
它通过查看您的设置文件来填充静态 url。STATIC_URL
默认设置为/static/
我认为的设置?如果静态文件在您的公司 Web 服务器上出现一个奇怪的 url,您可以在设置中更改它,它会反映在所有模板中。因此,它们是否是绝对的并不重要。
当你去部署你填写STATIC_ROOT
你的设置,这只是你设置你的网络服务器来查找静态文件的路径。然后,如果您运行manage.py collectstatic
,它会将它们复制到该目录。STATIC_ROOT
这是我认为的唯一功能。
我将模板目录与我的静态目录分开,主要是因为您希望您的网络服务器只提供静态文件,而模板由 python 处理。因此,就 Web 服务器查看静态文件而言,它们几乎不是应用程序的一部分。我将模板和静态文件保存在基本目录中的单独路径中,主要是因为它们都不是 python 源文件。
所以我的项目结构是这样的:
manage.py
website/settings.py
app/models.py
app/views.py
templates/base.html
static/js/jquery.js
static/css/bootstrap.css
相对路径的问题在于,如果您的 url 方案更改,它们将需要更改。
可选:我在此博客中发现,这有助于不将绝对文件系统路径放入 settings.py,如果您在多台机器上工作,例如工作和家庭,这很好:( 1.4 的布局略有不同,我在顶部使用它我的设置:
import os
import django
import manage
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__))
SITE_ROOT = os.path.dirname(os.path.realpath(manage.__file__))
而不是他们建议的(设置的位置已在 1.4 或 1.3 中移动)所以SITE_ROOT
搞砸了。我认为这可能会奏效。在我使用的设置中进一步向下:
# Additional locations of static files
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, 'static'),
)
这将告诉开发服务器在哪里可以找到静态文件。您可以对模板执行相同的操作,或者只使用完整的文件路径。