首页 > 其他分享 >Django - 在后台上传文章封面图 - 并在前端页面展示

Django - 在后台上传文章封面图 - 并在前端页面展示

时间:2023-12-09 15:34:40浏览次数:30  
标签:img title models MEDIA Django media article 上传 页面

需要用到 models.ImageField(), 它继承自 models.FileField(),  用ImageField的时候需要安装pillow

pip install pillow -i https://pypi.douban.com/simple/

 

首先,进行媒体文件配置:

settings中配置:

# 真正存储图片的文件夹
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

# 用于URL访问
MEDIA_URL = "/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)

  

此时,就已经配置好了,可以进行测试了

现在,定义一个模型:

# 文章表
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='封面图')

  

此时,我们在后台上传一张图片:

 那怎么在前端展示这个封面图呢?
例如,现在我来展示一篇文章的信息,如下:

{% 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】

{% for article in articles %}
    	<div>
            <img src="{{ article.article_picture.url }}" alt="">
            <br>
            <br>
            <p>{{ article.title }}</p>
            <p>{{ article.content }}</p>
        </div>
{% endfor %}

 

这样就可以了,如图:

 

标签:img,title,models,MEDIA,Django,media,article,上传,页面
From: https://www.cnblogs.com/zhangyh-blog/p/17891019.html

相关文章

  • 饮冰十年-人工智能-FastAPI-03- FastAPI之模型迁移(类似Django的migrante)
         在开发Web应用程序时,通常会涉及到数据库模型的更改,例如添加新的表、字段或索引。为了使这些更改反映在数据库中,我们使用数据库迁移工具。FastAPI本身并不包含数据库迁移(migration)的功能,但你可以使用第三方库来处理数据库迁移。其中,Alembic是一个常用的数据库迁......
  • springboot整合minio上传文件
    (springboot整合minio上传文件)前言上章讲了MinIo的下载安装及创建bucket方法,今天来讲一下在springboot中如何整合运用MinIo进行文件上传功能。springboot整合minio1.引入minio依赖<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5......
  • Django 含有外键模型新增数据以及序列化
    Django含有外键模型新增数据以及序列化Django原生实现外键classAppleModel(models.Model):id=models.AutoField(primary_key=True)app_name=models.CharField(max_length=50)classPickleModel(models.Model):pid=models.AutoField(primary_key=True)......
  • 博客园作为图床,上传图片自动添加图片水印
    专属于博客园的教程。markdown上传图片,添加图片水印,再上传到博客园图床。前言图床有防盗链什么的,处理起来实在是麻烦。既然博客园支持图床,我现在只在博客园写,那就捣鼓了一下。今天是通义千问工程师。菜鸡啥也不会。参考教程首先应参考教程配置,保证博客园图床正确,再对python......
  • upload-labs文件上传通关思路总结
    一、描述顾名思义,文件上传就是利用服务器对上传文件时存在的漏洞来实现上传任意文件,通过自己编写的文件内容让服务器执行文件内容达到可控的目的,但文件的上传往往回有各种各样的过滤,以下将演示upload-labs的关卡:二、关卡1、pass-01尝试把webshell传入到服务器,发现服务器对......
  • Python 使用Paramiko 上传下载远程服务器的文件或文件夹
    Python的Paramiko模块提供了用于SSH连接和文件传输的功能。可以使用Paramiko来上传或下载远程服务器上的文件或文件夹。上传文件要上传文件,可以使用Paramiko的SFTPClient类的put()方法。该方法接受两个参数:本地文件路径和远程文件路径。以下示例将本地文件/tmp/f......
  • django如何远程查询多对多字段?
    解决办法假设A表有一个多对多properties字段,通过A表远程查询properties的名称qs=A.objects.filter(properties__name=xxx)更复杂的:A表有一个外键字段version连接B表,B表有一个多对多字段properties,通过A表远程查询properties的名称qs=A.objects.filter(version__proper......
  • 使用FreeMacker生成静态页面
             我们在生成静态页面时需要先new一个configuration对象,并将Freemacker的版本给它,如果我们的模板是文件则我们需要获得他的路径,以及使用DirectoryForTemplateLoading驱动,如果是字符串,则使用StringTemplateLoader驱动,通常我们是用的字符串驱动,之后我们将模板驱动放......
  • 使用django连接MySQL
    使用python311+pycharm社区版+MySQL80,使用django连接MySQL1.下载1.1.官网下载pythonhttps://www.python.org/downloads/如我的python3.11.4,可以进入如下的页面进行hash校验https://www.python.org/downloads/release/python-3114/1.2.官网下载pycharmhttps://www.......
  • 博客上传图片,自动添加水印的办法
     效果使用PicList,在typora里将图片上传图床时,自动添加水印。右下角有水印图片。PicList(http替换成了hxxp,保险起见。)大佬网站hxxps://piclist.cnGithub地址hxxps://github.com/Kuingsmile/PicListredme.mdhxxps://github.com/Kuingsmile/PicList/blob/dev/README_cn.......