【问题标题】:Link to a django static file doesnt work链接到 django 静态文件不起作用
【发布时间】:2016-02-11 03:25:54
【问题描述】:

在我的开发中。环境中有一个/static/文件夹,其中atm.为网站存储一些图像。

  1. 我在 settings.py 中的 INSTALLED_APPS 变量确实包含 django.contrib.staticfiles 应用和

    STATIC_URL = '/static/'

    STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

  2. 我在 urls.py 中的 urlpatterns 变量有这个

    urlpatterns+= 静态(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

  3. 最后,在我的 template.html 文件中,我正在遍历我的 cardset 对象,并尝试为每个对象提供这样的图像

    <img src=" {{STATIC_URL}}/images/{{cardset.image}}" alt="{{ cardset.name }}" 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 吗?

标签: django django-templates django-views


【解决方案1】:

在我看来你仍然可以使用static 标签。要在不使用图像字段的情况下构建字符串,您的链接只需稍微调整一下:

<img src="{% static "images/" %}{{cardset.image}}" alt="{{ cardset.name }}" 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/”部分添加到模板中?
猜你喜欢
  • 2016-08-20
  • 2012-08-16
  • 1970-01-01
  • 2013-04-06
  • 2015-11-09
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
相关资源
最近更新 更多