如何在<img src=""/>中添加django模板变量?

时间:2018-10-14 13:25:32

标签: python django django-templates

我有一个包含两个字段的照片模型:

title = models.CharField()
path = models.CharField()

当我在管理面板中添加新照片时,路径等于/images/image_ex.jpg,这是我的视图文件:

def gallery(request):
   photos = Photo.objects.all()
   return render(request, 'gallery.html', {'photos': photos})

这是gallery.html中的标签:

{% loadstaticfiles %}
<img src="{%static '{{photo.path}}'%}"/>

问题在于照片无法渲染,如果我查看页面代码,则src等于这样的内容:

src="static/%7B%7B%20photo.path%20%7D%7D"

出什么问题了?如何在src中使用模板变量? 附言images文件夹存在于静态文件夹中,图像也存在。我将静态目录添加到settings.py。另外,如果我将src更改为正常的,例如

<img src="{static 'images/image_ex.png'%}">

照片正常显示。

3 个答案:

答案 0 :(得分:0)

您在这里将'{{photo.path}}'作为字符串传递给{% static ... %},因此它将简单地将静态URL根前缀放在此字符串之前。

如果要使用photo.path内容,可以使用:

<img src="{% static photo.path %}"/>

因此{% static ... %}接受变量作为参数,并将采用path变量的photo属性的内容。 (当然,如果已传递变量,或者是通过{% for ... %}循环生成的变量,等等。

答案 1 :(得分:0)

使用for标记

{% for p in photos %}
    <img src="{% static '{{ p.path }}' %}"/>
{% endfor %}

更好地将Imagefield用作模型中的字段

在您的settings.py

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

在项目中创建一个名为“媒体”的文件夹(与应用程序处于同一级别)

在您的urls.py(主要)中

from . import views, settings
from django.contrib.staticfiles.urls import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns


urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

在您的模型中。py

用Imagefield替换CharField

image = models.ImageField(upload_to="my_folder_name")

赞:

class Photo(models.Model):
    title = models.CharField()
    image = models.ImageField(upload_to="my_folder_name"))

您的意见。py

def gallery(request):
   photos = Photo.objects.all()
   return render(request, 'gallery.html', {'photos': photos})

在您的模板中

{% for p in photos %}
    <img src="{{ p.photo.url }}"/>
{% endfor %}

答案 2 :(得分:0)

这样做:

<img src="{static 'images/'%}{{image_ex.png}}">

在静态标记范围结束后使用它。