Django - 在后台上传文章封面图 - 并在前端页面展示
需要用到 models.ImageField(), 它继承自 models.FileField(), 用ImageField的时候需要安装pillow
pip install pillow -i https://pypi.douban.com/simple/
首先,进行媒体文件配置:
settings中配置:
1 2 3 4 5 | # 真正存储图片的文件夹 MEDIA_ROOT = os.path. join (BASE_DIR, "media" ) # 用于URL访问 MEDIA_URL = "/media/" |
为了能够正确访问到资源,需要配置一下urls.py
1 2 3 4 5 6 | from django.conf import settings from django.conf.urls. static import static urlpatterns = [ ... ] + static (settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) |
此时,就已经配置好了,可以进行测试了
现在,定义一个模型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 文章表 class Article(models.Model): # 文章标题title title = models.CharField(max_length = 64 , verbose_name = '标题' ) # 文章内容content content = models.TextField(verbose_name = '正文' ) # 【文章的封面图 article_picture】 # upload_to字段表示,要将图片上传到哪个路径下,此处为img # 这个操作是在【MEDIA_ROOT = os.path.join(BASE_DIR, "media")】下进行的,也就是会在media下有一个img # 文件真正存放的位置是: media/img/xxx.png # 而article_picture字段中存的只是图片的路径 article_picture = models.ImageField(upload_to = 'img/' , verbose_name = '封面图' ) |
此时,我们在后台上传一张图片:
那怎么在前端展示这个封面图呢?
例如,现在我来展示一篇文章的信息,如下:
1 2 3 4 5 6 7 8 9 | { % for article in articles % } <div> <img src = "{{ article.article_picture }}" alt = ""> <br> <br> <p>{{ article.title }}< / p> <p>{{ article.content }}< / p> < / div> { % endfor % } |
但是,这时候还是显示不了图片,原因是 “<img src="{{ article.article_picture }}" alt="">” 写错了,应该这么写:【article.article_picture.url】
1 2 3 4 5 6 7 8 9 | { % for article in articles % } <div> <img src = "{{ article.article_picture.url }}" alt = ""> <br> <br> <p>{{ article.title }}< / p> <p>{{ article.content }}< / p> < / div> { % endfor % } |
这样就可以了,如图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现