Django静态图像文件无法加载资源

Posted

技术标签:

【中文标题】Django静态图像文件无法加载资源【英文标题】:Django Static image File Failed to load resource 【发布时间】:2016-12-30 22:41:49 【问题描述】:

已修复 这是我的解决方案,在主程序 urls.py 中我必须添加这些行。

从 django.conf 导入设置 从 django.conf.urls.static 导入静态

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

我有一个名为 Item 的模型,里面有一个图像字段。我在数据库中添加了一个带有图像的新项目,并尝试将其加载到我的索引模板中。但是,当我查看控制台时,我没有得到图像(“WEBSITENAME/site_media/items/image.jpg 404(未找到)”)

我认为问题出在 settings.py 文件中,但我无法弄清楚我到底做错了什么。

index.html 模板

% load static %
<div class="item" style="background-image: url(' item.img.url ')">`

Model.py

class Item(models.Model):
    name = models.CharField(max_length=200)
    img = models.ImageField(upload_to='items', default='', blank=True, null=True)

    def __str__(self):
        return "%s" % (self.name)

Views.py

def index(request):
    latestItems = Item.objects.all().order_by('-id')[:3][::-1]
    return render(request, 'webshop/index.html', 'latestItems' :latestItems)

settings.py

SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
MEDIA_ROOT = os.path.join(SITE_ROOT, 'site_media/')
MEDIA_URL = 'site_media/'

【问题讨论】:

我设法修复了它。我必须在主 urls.py 文件中添加这些行: from django.conf import settings from django.conf.urls.static import static urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 请记住,为了安全起见,您可以添加:if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 【参考方案1】:

在你的settings.py

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
STATIC_URL = '/static/'

并阅读此document

使用您显示的目录根结构,我认为上述设置应该可以工作。虽然没有测试过。让我知道它是否有效。

【讨论】:

对于像我这样对 django 很陌生的人来说,理解所提供的文档是相当困难的。我尝试了代码,但不幸的是没有任何改变。我已经有了 STATIC_URL = '/static/' 顺便说一句,因为我可以很好地加载 css 文件。 1.检查静态文件链接 - 将静态文件夹放入任何 css 并像这样 template/css.css 或 ctl + 空格进行测试,如果你链接得很好,你应该会看到任何打击 2.检查项目 - 如果项目存在,item.anyfeilds 将显示在您的页面上 3.检查语法 - 可能不正确 "background-image: url(' item.img.url ')" 所有这些都很好我从项目加载文本很好我只是没有在示例中显示它我的坏。我还从名为 appname/static/css/style.css 的文件夹中加载了一个 css 文件,语法应该没问题。数据库中的图像存储在应用程序外部,但在项目根目录中,如下所示:projectroot/site_media/items/item.jpg【参考方案2】:

你有:

upload_to='items'

但是:

 item.img.url 

应该这样吗?

 items.img.url 

【讨论】:

upload_to='items' 是一个名为 items 的文件夹 item.img.url 是对象 item【参考方案3】:

在 settings.py 中:

PROJECT_ROOT = os.path.abspath(os.path.dirname(__ file __))

STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, "静态"), )

【讨论】:

以上是关于Django静态图像文件无法加载资源的主要内容,如果未能解决你的问题,请参考以下文章

静态文件不再加载 - Django

静态文件未加载 [DJANGO]

如何通过 HTTPS 提供 Django 静态文件?

Nextjs:无法从静态文件夹加载图像

使用 Heroku 处理 Django 媒体文件

django 加载静态图片失败