【问题标题】:Django: Insert image in a template whose path is dynamicDjango:在路径是动态的模板中插入图像
【发布时间】:2016-10-01 04:06:31
【问题描述】:

我知道我可以使用以下模板在 html 生成的页面中插入图像:

 <img src="{% static "myapp/my_image.jpg" %}" alt="Image Description">

问题是我想要稍微复杂一点的东西。假设我的模板中有一个具有 user.first_name 和 user.last_name 属性的对象“用户”。我想插入一张图片,其路径为:

 <img src="{% static "myapp/{{user.first_name}}_{{user.last_name}}.jpg" %}" alt="Profile Picture">

这一行是错误的,我得到一个错误(Django 无法解析表达式)。有人可以帮忙吗?

我正在构建一种带有照片的组织结构图,这是包含每个成员的个人资料图片的正确方法(基于图片应该命名为 firstname_lastname.jpg 的事实)?

谢谢

【问题讨论】:

  • 在您的视图中创建路径并将其传递给模板...
  • 或者在User类上写一个方法。

标签: django


【解决方案1】:

如果目标只是设置动态图像路径。这对我有用。你可以试试这个。

{% load static %}
<img src ="{% static 'images/myimage.jpg' %}" alt="My image" width="1500" height="333" id="plot" style="visibility: hidden"/>
<script>
function imageShow(){
  var name="myname";
  {% load static %}
  var filename="{% static 'images/' %}"+name+".png";
  document.getElementById("plot").src=filename;
  document.getElementById("plot").style.visibility='vsible';
}
</script>

【讨论】:

    【解决方案2】:

    你可以做另一件事:

    <img src ="{% static 'myapp/' %}{{user.first_name}}_{{user.last_name}}.jpg" alt="Profile Picture">
    

    这同样可以正常工作。希望这会有所帮助:)

    【讨论】:

      【解决方案3】:

      您必须使用自定义过滤器(不要使用add,这不适用于添加字符串)。

      <img src="{% static 'myapp/'|addstring:user.first_name|addstring:'_'|addstring:user.last_name|addstring:'.jpg' %}" alt="Profile Picture">
      

      你的custom filter addstring 可能在哪里

      # In : templatetags/<app>_extras.py
      
      from django import template
      
      register = template.Library()
      
      @register.filter
      def addstring(s1, s2):
          return str(s1) + str(s2)
      

      另一种选择是让自定义过滤器发挥所有作用并在 img src 中使用它:

      @register.filter
      def imgsrc(user):
          return 'myapp/{}_{}.jpg'.format(user.first_name, user.last_name)
      

      【讨论】:

        【解决方案4】:

        虽然我建议在您的视图中创建路径并将其作为上下文传递给您的模板,但您也可以使用add filter

        {% static "myapp/"|add:user.first_name|add:"_"|add:user.last_name|add:".jpg" %}
        

        您也可以为此创建自定义模板标签。很多选择。

        【讨论】:

        • 尽管其他答案说add 不适合添加字符串,但这对我来说很好。 Django 1.10,Python 3.5.1。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 1970-01-01
        • 2012-08-26
        • 2012-03-21
        • 2023-03-02
        相关资源
        最近更新 更多