我正在努力制作一个可下载的文本文件,我想我已经实现了这一点,但是当我运行代码时,我得到了一个权限被拒绝的错误。
当我打开这个文本文件时,它是否会在文件系统中的任何位置创建?因为我不想存储这些文件,只需创建它们并将它们下载到用户机器
IOError at /networks/configs/STR-RTR-01/7
[Errno 13] Permission denied: u'STR-CARD-RTR-01.txt'
配置:
def configs(request, device, site_id):
site = get_object_or_404(ShowroomConfigData, pk=site_id)
config_template = get_object_or_404(ConfigTemplates, device_name=device)
file_name = device[:4] + site.location.upper()[:4] + "-" + device[4:] + ".txt"
device_config = None
with open(file_name, 'w') as config_file:
device_config = env.from_string(config_template.config)
device_config.stream(
STR = site.location.upper()[:4],
IP = site.subnet,
BGPASNO = site.bgp_as,
LOIP = site.r1_loopback_ip,
Location = site.location,
Date = site.opening_date,
).dump(config_file)
return render(request, file_name, {
})
答案 0 :(得分:0)
如果目标是提供一个用户可以下载自动生成的文件的链接,则无需向磁盘写入任何内容。
您可以在Python字符串中构建所需的内容,并使用Content-Disposition
标头建议用户的浏览器应该下载文件而不是显示它,并使用其filename
参数来指定用户保存文件的默认文件名。
一个稍微简单的视图函数示例,它可以做到这一点......
from django.http import HttpResponse
def get_config_file(request):
filename = 'config.txt'
content = 'This is the content of my config file'
content_type = 'text/plain'
content_disposition = 'attachment; filename=%r' % filename
response = HttpResponse(content, content_type=content_type)
response['Content-Disposition'] = content_disposition
return response