在django中加载带有变量名的静态文件

时间:2013-08-04 07:55:26

标签: python django web-applications

我正在尝试加载以下静态文件

 <a href="{%static 'static/images/'{{ image.title }}'.png' %}">img file</a> 

其中image位于从数据库派生的images的for循环中。

但我只是收到错误Could not parse the remainder: '{{' from ''static/matrices/'{{'

我该怎么做才能解决这个问题?我不能使用相对路径,因为这也将由子部分使用,使用相同的html模板。

7 个答案:

答案 0 :(得分:10)

我通过在静态路径中使用空字符串然后在自己的部分中使用我的变量来实现这一点,如下所示:

<a href= "{% static "" %}{{obj.a}}/{{obj.b}}/{{obj.c}}.gz" >Name</a>

答案 1 :(得分:10)

您应该将完整字符串传递给staticfiles中的静态标记。这样就可以使用静态存储来查找文件。

{% load staticfiles %}
{% with 'images/'|add:image.title|add:'.png' as image_static %}
  {% static image_static %}
{% endwith %}

但在您的使用案例中,如果您只是将图像的路径存储在图像模型本身上可能会更好。

答案 2 :(得分:4)

您可以使用get_static_prefix模板标记。 get_static_prefix是一个变量,其中包含STATIC_URL中指定的路径。你的代码是:

{% load static %}
<a href="{% get_static_prefix %}static/images/{{ image.title }}.png">img file</a>

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}
<a href="{{ STATIC_PREFIX }}static/images/{{ image.title }}.png">img file</a>

参考:get_static_prefix

答案 3 :(得分:2)

你应该避免嵌套标签。

你想解决什么?图像不是动态内容的一部分吗?静态标记用于静态内容而非上传的媒体文件。

如果你必须使用静态标签,那么正确的方式将是大约的顺序;

{% static image %} or {% static image.file %}

取决于对象布局。如果您使用的是ImageField(继承FileField),则图片对象已经保留了路径,因此无需手动添加扩展名。

答案 4 :(得分:1)

我最终做的就是从名称本身拆分路径。这些图像代表制表符,是静态的并且是顺序的。它们没有以图像方式连接到数据库。

我不想为每次运行重复html,所以我最终做了这样的forloop,有点简化了。

{% for option in options_obj %}
   <img class="highlight" src="{% static "store/img/editor/tab-" %}
   {{ option.name.lower }}-selected.png">
{% endfor %}

编辑: 即使这在大多数情况下都有效,但它确实会让事情变得混乱。对我来说,当使用不同语言设置的不同图像并同时使用CachedStaticFilesStorage等工具时,就会发生这种情况。如果您需要为图像添加语言代码或其他内容,这是一个更加可靠的解决方案

{% for option in options_obj %}
    <img class="highlight" src="{% static "store/img/editor/tab-"
    |add:LANGUAGE_CODE|add:"-selected.png" %}">
{% endfor %}

答案 5 :(得分:-1)

  

settings.py

中添加行
STATIC_URL = '/static/'


MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
  

运行命令: - python manage.py collectstatic

生成静态文件夹

enter image description here

 {% load static %}
   <img src="{% static "images/2.jpg" %}" alt="something" style="width:80%">
  

FOR LOAD CSS FILES

{% load staticfiles %}
    <link rel="stylesheet" type="text/css" href="{% static 'media/style.css' %}"/>

答案 6 :(得分:-14)

报价过多!

只需

<a href="{% static 'images/{{ image.title }}.png' %}">img file</a> 

并且您不必在链接中调用静态,因为您已经加载了静态