python - 为 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),
]
解决方案
视图.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'),
推荐阅读
- c++ - .h 文件是被编译器区别对待还是“只是”一个命名约定?
- r - openCPU:单服务器开发模式下出现奇怪错误“Versuch eine Nicht-Funktion anzuwenden”
- python - 如何在 Python 中将字典列表转换为自定义对象
- android - Firebase admin sdk 无法解码 jwt 令牌
- python - 用 Python 计算欧几里得距离太慢了
- html - 如何设置输入类型编号的默认值
- ios - 如何将两个新单元格添加到部分和分页部分?
- algorithm - 迷宫程序时间复杂度
- javascript - 使用“window.open”打开的窗口关闭后如何运行代码?
- nativescript - 如何从 TypeScript 中的资源中获取 NativeScript 图像?