链接到 django 静态文件不起作用
Posted
技术标签:
【中文标题】链接到 django 静态文件不起作用【英文标题】:Link to a django static file doesnt work 【发布时间】:2016-02-11 03:25:54 【问题描述】:在我的开发中。环境中有一个/static/文件夹,其中atm.为网站存储一些图像。
我在 settings.py 中的 INSTALLED_APPS 变量确实包含 django.contrib.staticfiles 应用和
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
我在 urls.py 中的 urlpatterns 变量有这个
urlpatterns+= 静态(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
最后,在我的 template.html 文件中,我正在遍历我的 cardset 对象,并尝试为每个对象提供这样的图像
<img src=" STATIC_URL/images/cardset.image" class="bn"/>
现在,问题是:
a.) STATIC_URL 解析为空字符串。
b.) 我想我不能在这里使用 static 标记,因为变量 cardset.image 在 django 模板中无法正常工作 % ... % 带有 static 标签。
您能否建议我在这里应该尝试做什么?
【问题讨论】:
settings.STATIC_ROOT 为空? @EchoUATeam 是的。不应该吗? 什么是static.image
?它是一个 ImageField 吗?如果是这样,您根本不需要 STATIC_URL。
@DanielRoseman atm cardset.image 是一个字符串。我有点知道 ImageField 是一种正确的做法,但我试图了解这些事情是如何与 STATIC_URL 一起工作的。我应该立即跳到 ImageField 吗?
【参考方案1】:
在我看来你仍然可以使用static
标签。要在不使用图像字段的情况下构建字符串,您的链接只需稍微调整一下:
<img src="% static "images/" %cardset.image" class="bn"/>
应该正确呈现在 html 中。根据您的cardset.image
的外观,您也许可以去掉中间的images/
部分。
请记住,您还需要在模板顶部包含 % load staticfiles %
。
【讨论】:
耶!那行得通,谢谢!一个问题。我们正在讨论的这个模板扩展了另一个 base.html 模板。 base.html 模板确实有 % load staticfiles % 东西。为什么我需要在我们正在讨论的模板之上再指定一次? :) 没问题!如果您的 base.html 中已经有% load staticfiles %
,则无需再次添加它,我提到它以防万一:)
现在,这很奇怪,因为没有模板顶部的 % load staticfiles % 它将无法工作。它说:“无效的块标签:'静态',预期'空'或'endfor'”。我的确切层次结构是 base.html -> catalog.html -> template_we_are_talking_about.html。你认为它可能由于层次结构的深度而不起作用吗?
是的,这很奇怪我也遇到了同样的错误,而且它不能归结为层次结构深度,因为我尝试使用深度为 2...它没有提到任何问题在文档中,所以我想您可能需要重复 % load staticfiles %
,尽管我不确定这是否是最佳做法【参考方案2】:
由于cardset.image
是一个字符串,你的假设 b 是错误的;标签与变量完美配合:
% static cardset.image %
( STATIC_URL
不起作用的原因可能是因为您没有将它传递给模板;它不会自动出现,它只是一个标准模板变量。)
【讨论】:
首先谢谢!!快速提问:如何将字符串的“/images/”部分添加到模板中?以上是关于链接到 django 静态文件不起作用的主要内容,如果未能解决你的问题,请参考以下文章