我正在使用 django 創建一個網站。我的一個模型包含 ImageField。檔案保存在 main_dir/media/images 中。我想在模板中顯示特定的影像,但我無法實作。而不是照片,我只能看到默認影像圖示,這意味著(我猜)找不到該影像
設定.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
楷模
class Gallery(models.Model):
name = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE, default=None, null=True, blank=True)
date_posted = models.DateTimeField(auto_now_add = True)
def __str__(self):
return self.name
class Photo(models.Model):
gallery = models.ForeignKey(Gallery, on_delete=models.CASCADE, default=None, related_name='photos')
name = models.CharField(max_length=200)
description = models.TextField(blank=False)
image = models.ImageField(blank=True, upload_to='images')
意見
def gallery(request, pk):
gallery_object = Gallery.objects.get(id=pk)
context = {'gallery':gallery_object}
return render(request, 'Gallery/gallery.html', context)
html
<!DOCTYPE html>
{% extends 'base.html' %}
{% block content %}
<h1>Gallery: {{ gallery.name }}</h1>
{% for photo in gallery.photos.all %}
<img src="{{photo.image.url}}">
<a>{{photo.image.url}}</a> #it's here only to check if path is correct
{% endfor %}
<a href="{% url 'home' %}">Go back to home page</a>
{% endblock content %}
我應該改變什么才能正確顯示影像?
uj5u.com熱心網友回復:
您需要使用相同的條件將 .get 更改為 .filter 以獲取多個物件,因為 get 將僅回傳 1 個物件,并且您不能在模板中執行 for 回圈
uj5u.com熱心網友回復:
有幾件事不對。首先,如果你想回傳多張影像,那么你必須使用 .filter() 而不是 .get() ,如果你是 .get() 而不是過濾器,那么你不必像它一樣回圈遍歷它是給一個單一的物件。并且影像存盤在照片模型中,為此您必須呼叫它而不是畫廊。
解決方法如下: 對于單個物件: 視圖函式:def gallery(request, pk): gallery_object = Photos.objects.get(id=pk)
context = {'photo': photo_object}
return render(request, 'Gallery/gallery.html', context)
HTML 模板:
<!DOCTYPE html>
{% extends 'base.html' %}
{% block content %}
<h1>Gallery: {{ photo.name }}</h1>
<img src="{{photo.image.url}}">
<a>{{photo.image.url}}</a> #it's here only to check if path is correct
<a href="{% url 'home' %}">Go back to home page</a>
{% endblock content %}
回傳多個物件:
視圖功能:
def gallery(request, pk):
gallery_object = Photos.objects.filter(#your query)
context = {'photos': photo_object}
return render(request, 'Gallery/gallery.html', context)
HTML:
<!DOCTYPE html>
{% extends 'base.html' %}
{% block content %}
{% for photo in photos %}
<h1>Gallery: {{ photo.name }}</h1>
<img src="{{photo.image.url}}">
<a>{{photo.image.url}}</a> #it's here only to check if path is correct
{% endfor %}
<a href="{% url 'home' %}">Go back to home page</a>
{% endblock content %}
uj5u.com熱心網友回復:
最后,我發現了一個問題。我忘了添加
urlpatterns =static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
到我的 urls.py 檔案。囧
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/424951.html
上一篇:找不到頁面(404)請求方法:GET請求URL:http://127.0.0.1:8000/blog/blog/Blog comments/
