首页 > 解决方案 > 无法使用 django 显示模型中的图像

问题描述

在 settings.py

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

在模型.py

class Campaign(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    # this is many to one relationship, on_deleting user, profile will also be deleted
    campaign_title = models.CharField(max_length=200, blank=True)
    campaign_image = models.ImageField(default="default_campaign.png",upload_to="campaign_pictures")

在views.py中

def landing_page(request):
    campaigns = Campaign.objects.all().order_by('-id')
    print(campaigns)
    return render(request, 'core/landing_page.html',{'campaigns':campaigns})

在landing_page.html

{% for campaign in campaigns %}
<img src="{{campaign.campaign_image.url}}">
{% endfor %}

问题

  1. 如果文件名为 abc xyz.jpg,它会以 abc_xyz.jpg 格式保存到 /pictures/campaign_pictures
  2. 在 html 模板中,图像的 src 应该是 '/pictures/campaign_pictures/abc_xyz.jpg' 但它只显示 '/pictures/abc%20xyz.jpg'

标签: pythondjangoimagefield

解决方案


我想你错过了 urls.py 文件

from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

也纠正它

    campaign_image = models.ImageField(default="default_campaign.png",upload_to="campaign_pictures/")

推荐阅读