我有一个包含两个字段的照片模型:
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'%}">
照片正常显示。
答案 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}}">
在静态标记范围结束后使用它。