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

Django如何拆分上传文件扩展名并在不同HTML元素中对应展示

完整可运行修改代码

所有修改按文件顺序操作即可:

1. 修正模型文件(你原文件名拼写错误,应为models.py)

import os
from django.db import models

class Upload(models.Model):
    document = models.FileField(upload_to='documents')
    
    # 新增方法获取文件扩展名
    def get_file_ext(self):
        # 提取扩展名并转小写、去掉点
        return os.path.splitext(self.document.name)[1].lower().strip('.')

修改后无需执行数据库迁移,模型方法不影响表结构。

2. 修改settings.py配置(项目根目录的settings.py)

在文件末尾添加以下两行,配置上传文件存储规则:

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

然后在项目根目录手动新建一个名为media的文件夹,用于存储上传的文件。

3. 修改项目路由urls.py

from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
# 导入你写的Home视图
from your_app_name.views import Home # 把your_app_name改成你自己的app名称

urlpatterns = [
    path('admin/', admin.site.urls),
    path('drive/', Home, name='drive'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

4. 修改views.py

from django.shortcuts import render, redirect
from .models import Upload

def Home(request): 
    if request.method == 'POST': 
        if len(request.FILES) == 0:
            return redirect("/drive")
        else:
            photo = request.FILES['doc'] 
            Upload.objects.create(document = photo) 
            return redirect("/drive")
   
    if request.method == "GET": 
        photo = Upload.objects.all() 
        context = {
             'phone': photo 
             }   
    # 你原来的模板名写错了,改成你实际用的index.html
    return render(request, 'index.html', context)

5. 完整index.html代码

<!DOCTYPE html>
<html>
<head>
    <title>文件展示</title>
</head>
<body>
    <!-- 上传文件表单 -->
    <form method="post" enctype="multipart/form-data" action="/drive/">
        {% csrf_token %}
        <input type="file" name="doc" accept=".jpg,.pdf,.docx,.mp4" required>
        <button type="submit">上传文件</button>
    </form>
    <hr>
    <!-- 已上传文件展示 -->
    {% for i in phone %}
        <div style="margin: 20px 0;">
            <p>文件地址:{{i.document.url}}</p>
            {% with ext=i.get_file_ext %}
                {% if ext == 'jpg' or ext == 'jpeg' or ext == 'png' %}
                    <!-- 图片类型用img标签展示 -->
                    <img src="{{i.document.url}}" alt="预览图" width="200" style="display: block;">
                {% elif ext == 'pdf' %}
                    <!-- pdf用embed标签内嵌展示 -->
                    <embed src="{{i.document.url}}" type="application/pdf" width="600" height="400">
                {% elif ext == 'docx' %}
                    <!-- docx无法直接内嵌,提供下载链接 -->
                    <a href="{{i.document.url}}" download>点击下载docx文件</a>
                {% elif ext == 'mp4' %}
                    <!-- 视频用video标签播放 -->
                    <video controls width="400">
                        <source src="{{i.document.url}}" type="video/mp4">
                        您的浏览器不支持视频播放
                    </video>
                {% else %}
                    <p>不支持的文件格式,<a href="{{i.document.url}}" download>点击下载</a></p>
                {% endif %}
            {% endwith %}
        </div>
    {% empty %}
        <p>暂无上传的文件</p>
    {% endfor %}
</body>
</html>

内容的提问来源于stack exchange,提问作者AMRIT SHAHI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:09:03