You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django后台上传博客图片后无法显示的技术求助

Django博客图片无法显示的解决办法

1. 检查settings.py的媒体配置

必须在settings.py里正确设置媒体文件的存储路径和访问URL:

# settings.py
import os

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

# 媒体文件存放的根目录(对应你项目里的media文件夹)
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 浏览器访问媒体文件的前缀URL
MEDIA_URL = '/media/'

2. 配置项目根路由的媒体映射

在项目根目录的urls.py里,添加媒体文件的路由规则,让Django在开发环境能正确返回媒体文件:

# 项目根urls.py
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
    # 你的其他路由(比如博客文章的路由)
]

# 仅开发环境生效,生产环境请用Nginx等静态文件服务器处理
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3. 修正模板里的图片引用

模板里必须用{{ article.image.url }}来获取图片的完整访问路径,别自己硬写路径。示例模板代码:

<!-- 文章展示模板 -->
<div class="article-item">
    <h3>{{ article.title }}</h3>
    {% if article.image %}
        <!-- 直接使用模型字段的url属性,自动拼接MEDIA_URL -->
        <img src="{{ article.image.url }}" alt="{{ article.title }}的封面">
    {% endif %}
    <div class="article-content">{{ article.content }}</div>
</div>

如果模板里写死了/media/images/xxx.jpg,一旦MEDIA_URL或存储路径变了就会出错,用字段的url属性是最稳妥的。

4. 验证图片是否能直接访问

打开浏览器,输入http://localhost:8000/media/images/你上传的图片名.jpg,如果能看到图片,说明路由和路径配置没问题,问题出在模板引用;如果看不到,检查MEDIA_ROOT是否指向正确的文件夹,或者文件是否真的上传到了对应目录。

5. 确认模型的ImageField配置

你的models.py里的ImageField应该是这样的:

# models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    # upload_to指定上传到media下的images子目录,blank和null允许文章不上传图片
    image = models.ImageField(upload_to='images/', blank=True, null=True)
    
    def __str__(self):
        return self.title

确保upload_to='images/'没有写错,这样后台上传的图片才会存到media/images目录下。

内容的提问来源于stack exchange,提问作者Bennet Weber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:33:19