我有一个包含两个字段的照片模型:
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 中使用模板变量? 附:静态文件夹中存在图像文件夹,图像也存在。我将静态目录添加到settings.py。另外,如果我将 src 更改为普通的,例如
<img src="{static 'images/image_ex.png'%}">
照片渲染正常。
您在这里将
'{{photo.path}}'
作为 string 传递给 {% static ... %}
,因此它只会将静态 URL 根添加到该字符串之前。
如果你想使用photo.path
的
内容,你可以使用:
<img src="{% static photo.path %}"/>
因此
{% static ... %}
接受变量作为参数,并将获取 path
变量的 photo
属性的内容。 (当然,考虑到传递了变量,或者是使用 {% for ... %}
循环等生成的变量。
这样做:
<img src="{%static 'images/'%}{{image_ex.png}}">
静态标签作用域结束后使用。
使用for标签
{% for p in photos %}
<img src="{% static '{{ p.path }}' %}"/>
{% endfor %}
更好地使用 Imagefield 作为模型中的字段
在您的设置中.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
在您的项目中创建一个名为“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)
在你的 models.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 %}
对于模板
{% for image in all_image %}
<img src="{{ image.image.url }}"/>
{% endfor %}
已解决:在survey.html中动态加载图像
“survey.toolsTechnology”是一个动态变量,每次 变量发生变化,图像也会随之变化。
<img src="{% static 'images/'%}{{survey.toolsTechnology}}.png"/>