django:Content-Disposition filename:日本語 pdf csv output
django,Content,Disposition,filename,日本,pdf,csv,output
2025-03-18 08:48:48 时间
要件:
output CSV,PDF file
文件名:包含英语以外文字
対策:
英語以外のファイル名:url encode 必要
python :urllib.parse
环境,语言
Django4.1
python3.9
output csv sample
from django.http import JsonResponse, HttpResponse
import json, csv
def data_output_csv(request):
if request.method == 'POST':
bts = Data.objects.all()
# レスポンスの設定
response = HttpResponse(content_type='text/csv;')
filename = 'data.csv' # ダウンロードするcsvファイル名
response['Content-Disposition'] = 'attachment; filename={}'.format(filename)
writer = csv.writer(response)
for row in bts:
writer.writerow([
row.code,
row.name,
])
return response
file name: en
filename = 'data.csv' # ダウンロードするcsvファイル名
response['Content-Disposition'] = 'attachment; filename={}'.format(filename)
print(response['Content-Disposition'])
#print 結果
attachment; filename=data.csv
file name: ja / zh
# url encode对应
import urllib.parse
filename = 'data_日本語.csv' # ダウンロードするcsvファイル名
response['Content-Disposition'] = 'attachment; filename={}'.format(filename)
print(response['Content-Disposition'])
quoted_filename = urllib.parse.quote(filename)
response['Content-Disposition'] = 'attachment; filename={}'.format(quoted_filename)
print(response['Content-Disposition'])
#print 結果
---------------------
=?utf-8?b?YXR0YWNobWVudDsgZmlsZW5hbWU9ZGF0YV/ml6XmnKzoqp4uY3N2?=
---------------------
attachment; filename=data_%E6%97%A5%E6%9C%AC%E8%AA%9E.csv
---------------------
# 多浏览器对应
response['Content-Disposition'] = 'attachment; filename={}; filename*=UTF-8''{}'.format(quoted_filename, quoted_filename)
出力PDF実例
# pdf output
def output_order_pdf(request):
po = Order.objects.filter(pk=1).first()
num_3 = str(po.version).zfill(3)
yymm = datetime.now().strftime("%y%m")
filename = yymm + "【発注書】" + po.supplier_name + "_" + po.appl_purchase.purchase_id + "_" + num_3 + ".pdf"
quoted_filename = urllib.parse.quote(filename)
# 自定義pdf 出力methodより、バイナリデータを取得
pdf:io.StringIO = template_to_pdf('templete/order_output.html',{'order':po})
response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'attachment; filename={}; filename*=UTF-8''{}'.format(quoted_filename, quoted_filename)
#response['Content-Disposition'] = 'attachment; filename={}'.format(quoted_filename)
print(response['Content-Disposition'])
response.write(pdf.getvalue())
return response
# print ファイル名
attachment; filename=2208%E3%80%90%E7%99%BA%E6%B3%A8%E6%9B%B8%E3%80%91%E3%83%80%E3%83%9F%E3%83%BC%E4%BB%95%E5%85%A5%E5%85%88_Padmin220811225340_035.pdf;
filename*=UTF-82208%E3%80%90%E7%99%BA%E6%B3%A8%E6%9B%B8%E3%80%91%E3%83%80%E3%83%9F%E3%83%BC%E4%BB%95%E5%85%A5%E5%85%88_Padmin220811225340_035.pdf
相关文章
- Django的ORM简介
- 博客将 Django 1.11+ 升级到 Django 2.2+ 遇到的问题及规避方法
- pycharm运行环境配置_pycharm安装django
- Django-Admin后台管理内容
- django RelatedObjectDoesNotExist
- Django的ORM字段类型-2
- pycharm怎么配置django环境_pycharm环境搭建
- Django Web 极简教程(六)- Django Form(Part A)
- Django的ORM操作-删除数据
- vue django mysql_Python MySQL
- Django-缓存内容
- Django如何处理URL请求
- Django之文件上传
- Python进阶35-Django Auth组件
- Python进阶27-Django 路由层
- Django的聚合查询与原生操作
- Django学习笔记一初识Django
- pycharm中安装django_pycharm环境配置教程
- pycharm配置django环境_pycharm的terminal默认环境
- Python进阶26-Django 视图层