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

如何在Django网站中创建供用户下载的文本文件?

在Django中实现用户下载文本文件的方法

当然可以,下面是两种常见的实现方式,直接贴代码和步骤,你可以按需选用:

1. 动态生成文本内容并提供下载

这种方式适合需要根据用户数据实时生成文本的场景(比如导出用户的个人数据、生成报告等)。

在你的views.py中添加以下视图函数:

from django.http import HttpResponse

def download_dynamic_text(request):
    # 这里是你要生成的文本内容,可以根据业务逻辑动态拼接
    text_content = "这是动态生成的文本内容\n第二行内容\n用户ID:{}".format(request.user.id if request.user.is_authenticated else "匿名用户")
    
    # 设置响应头,告诉浏览器这是一个可下载的文件
    response = HttpResponse(text_content, content_type='text/plain')
    response['Content-Disposition'] = 'attachment; filename="my_dynamic_file.txt"'
    
    return response

2. 读取本地文本文件供用户下载

如果是要让用户下载服务器上已有的文本文件,可以用FileResponse来实现:

from django.http import FileResponse
import os
from django.conf import settings

def download_local_text(request):
    # 拼接文件路径,假设文件放在项目根目录下的media文件夹里
    file_path = os.path.join(settings.MEDIA_ROOT, "example.txt")
    
    # 检查文件是否存在
    if not os.path.exists(file_path):
        return HttpResponse("文件不存在", status=404)
    
    # 打开文件并返回下载响应
    response = FileResponse(open(file_path, 'rb'), content_type='text/plain')
    response['Content-Disposition'] = 'attachment; filename="example.txt"'
    
    return response

3. 配置URL并在模板中添加下载链接

在urls.py里添加对应的URL映射:

from django.urls import path
from . import views

urlpatterns = [
    # ... 其他URL
    path('download-dynamic/', views.download_dynamic_text, name='download_dynamic'),
    path('download-local/', views.download_local_text, name='download_local'),
]

然后在你的模板(比如template.html)中添加下载按钮或链接:

<a href="{% url 'download_dynamic' %}" class="btn">下载动态生成的文本</a>
<a href="{% url 'download_local' %}" class="btn">下载本地文本文件</a>

注意事项

  • 如果你处理的是大文件,建议用StreamingHttpResponse替代FileResponse,避免占用过多内存。
  • Content-Disposition头里的filename支持中文,但需要注意编码,比如用filename*=UTF-8''{}'.format(quote(filename))处理中文文件名。

内容的提问来源于stack exchange,提问作者Alexandre Boucard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:30:55