首页 > 解决方案 > 为 pdf 下载启用 django 下载按钮

问题描述

我正在尝试设置一个 django 按钮,以便下载文件。我尝试按照教程进行操作,但我认为我遗漏了一些东西。下面的urls.py代码是urls.py我在项目的应用程序部分生成的文件。我不确定这是否是正确的使用方法。下面的代码不起作用,本地主机不加载页面。url('download_my_pdf', download_pdf),但是,当我在我的网站加载中注释掉时,urls.py因为我们没有该链接返回视图中的代码。

索引.HTML:

<input type="button" value="Download" onclick="window.open('download_my_pdf')">

意见.PY:

from django.shortcuts import render
from django.http import HttpResponse
from wsgiref.util import FileWrapper

def index(request):
return render(request, "index.html", {})

def home(request):
return render(request, "home.html", {})

def download_pdf(request):
filename = 'faults.pdf'
content = FileWrapper(filename)
response = HttpResponse(content, content_type='application/pdf')
response['Content-Length'] = os.path.getsize(filename)
response['Content-Disposition'] = 'attachment; filename=%s' % 'faults.pdf'
return response

URLS.PY

from django.urls import url
from django.urls import path

from . import views

urlpatterns = [
 path('', views.index, name="index"),
 path('home', views.home, name="home"),
 url('download_my_pdf', download_pdf),
]

在此处输入图像描述

标签: pythonhtmldjangodjango-views

解决方案


视图.py

from django.http import HttpResponse, Http404

def open_file(request, *args, **kwargs):
    path = str(kwargs['p'])

    file_path = 'your path'
    if os.path.exists(file_path):
        with open(file_path, 'rb') as fh:
            response = HttpResponse(fh.read(), content_type="application/vnd.ms-excel")
            response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
            return response
    raise Http404

模板/模板.html

                            <a class="button" href="{% url 'open-file' path %}">Download</a>

网址.py

path('open/<str:path>/', views.open_file, name='open-file'),

推荐阅读