如何在<img>标签的src属性中使用Django模型属性的值
问题根因
Django 模板语法不支持在{% static %}等模板标签的参数内部嵌套{{ }}变量插值语法,因此你写的变量会被当作普通字符串处理,经过URL编码后就出现了%7B%7Bmodel.atributte%7D%7D这类输出。
解决方案1:模板层用add过滤器拼接(全版本兼容)
使用Django内置的add过滤器拼接路径片段,再传入static标签即可正常解析变量:
{% load static %} <img src="{% static 'media/'|add:model.attribute|add:'.jpg' %}" alt="{% static 'media/'|add:model.attribute|add:'.jpg' %}">
注意:你当前代码里的属性名写为atributte,请检查是否和模型实际定义的属性名attribute拼写一致,避免取值失败。
解决方案2:用静态资源前缀直接拼接(Django 3.0+适用)
如果你的Django版本在3.0及以上,可以用{% get_static_prefix %}获取静态资源根路径,直接和变量拼接,语法更直观:
{% load static %} <img src="{% get_static_prefix %}media/{{ model.attribute }}.jpg" alt="{% get_static_prefix %}media/{{ model.attribute }}.jpg">
解决方案3:视图层预生成路径(适合复杂拼接逻辑)
如果路径拼接规则比较复杂,也可以直接在视图层完成路径生成,模板直接调用即可:
# views.py 代码 from django.templatetags.static import static def your_view(request): # 获取你的模型实例 model = YourModel.objects.get(pk=xxx) # 预生成完整静态路径 img_full_path = static(f'media/{model.attribute}.jpg') return render(request, '你的模板文件名.html', {'img_full_path': img_full_path})
模板中直接使用变量即可:
<img src="{{ img_full_path }}" alt="{{ img_full_path }}">
内容的提问来源于stack exchange,提问作者MAD MAX
相关产品推荐
相关产品推荐

