Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django/JS-向用户发送文件,称为下载功能_Javascript_Python_Html_Django_Download - Fatal编程技术网

Javascript Django/JS-向用户发送文件,称为下载功能

Javascript Django/JS-向用户发送文件,称为下载功能,javascript,python,html,django,download,Javascript,Python,Html,Django,Download,我想让用户通过点击“下载”按钮来下载特定的文件。该按钮将与许多切换器链接,因此我编写了一个JS脚本,将“href”标记更改为指向正确的静态文件 我试图回答许多stackoverflow问题,阅读关于Django静态文件、媒体文件的文档,但不明白我需要对我的案例做些什么。非常感谢您的帮助,请让我介绍一下我所做的事情,并征求您的帮助/意见 我想让人们下载可以在以下位置找到的文件: "/home/user/xxxx/xxx/project/my_app/static/" 这是我在视图.py中的函数

我想让用户通过点击“下载”按钮来下载特定的文件。该按钮将与许多切换器链接,因此我编写了一个JS脚本,将“href”标记更改为指向正确的静态文件

我试图回答许多stackoverflow问题,阅读关于Django静态文件、媒体文件的文档,但不明白我需要对我的案例做些什么。非常感谢您的帮助,请让我介绍一下我所做的事情,并征求您的帮助/意见

我想让人们下载可以在以下位置找到的文件:

 "/home/user/xxxx/xxx/project/my_app/static/"
这是我在视图.py中的函数:

def send_file(request,file_name):
from django.contrib.staticfiles.storage import staticfiles_storage
import os
from wsgiref.util import FileWrapper
import mimetypes

filename =  staticfiles_storage.url(file_name)
download_name = file_name
wrapper = FileWrapper(open(filename))
content_type = mimetypes.guess_type(filename)[0]
response = HttpResponse(wrapper, content_type=content_type)
response['Content-Length'] = os.path.getsize(filename)
response['Content-Disposition'] = "attachment; filename=%s" % download_name
return response
我需要打开文件的确切路径,因此我所做的是在我的设置中定义
STATIC\u URL=“/home/user/xxxx/xxx/project/my\u app/STATIC/”
. 我不喜欢这个解决方案,因为在它之后,如果你检查我的源代码,你有我的项目的确切路径。如果我定义了
STATIC\u URL=“STATIC/”
,它将不起作用。我寻找了一种方法来获取静态文件的精确路径,但没有成功。这部分有什么帮助吗

url.py

    url(r'^download/static/(?P<file_name>[\w.]{0,256})$',views.send_file, name='send_file'),
在我的JS中使用{%url'我的应用程序:发送文件%}标记有解决方案吗?我发现一种解决方案是将脚本直接放在“template.html”中,这是一种好的行为吗


我的下载效果很好,但我觉得我所有的选择都很糟糕(静态URL和JSVAR URL定义)。我知道我的问题很难回答,但我真的需要这个帮助。任何例子都将不胜感激。多谢各位

几点。第一个是静态URL,您可以使用“/STATIC/”以斜杠开头和结尾,而不是完整路径。由于您尝试从同一域名下载,因此无需使用完整的URL“”。您只需在js var url变量中使用“/您的url”

Django无法呈现js文件,因此我们只有一个选项,将其保留在template.html中。为了更好地维护js代码,请尝试在加载文档时使用模板中的URL声明全局变量,并在脚本中使用它们。这样脚本部分就清晰了。例如

var all_my_urls = {
 "url":"{% url 'my_app:send_file'%}"
}

谢谢您的快速回答,当我更改我的静态URL“/STATIC/”时,它不起作用,因为在这一行
filename=staticfiles\u storage.URL(file\u name)
之后,它将找不到正确的文件。我没有收到这样的文件或目录:'/static/example.csv'。并且没有找到解决方案,使
filename=full\u path\u to\u static(文件名)
@YoganandSTATIC\u URL是从浏览器打开静态文件的前缀URL。无法使用此路径读取文件。要读取需要指定完整路径的文件,可以从settings.BASE_DIR获取该文件。我刚刚打印了我的基本目录,它是:“/home/user/xxxx/xxx/PROJECT”。如何添加缺少的部分“/my_app/static/”。我需要一些能给我提供u/home/user/xxxx/xxx/project/my_app/static/“u@yogana的东西,您可以在设置中定义新变量为static_folder=base_dir+“your path”。这会干净得多。
"if you click on a switcher"
id = switcher-checked
var atag = document.getElementById("dl-link");    
var url = "http://localhost:8000/test/download/static/"+id+".csv";        
atag.setAttribute("href",url);
var all_my_urls = {
 "url":"{% url 'my_app:send_file'%}"
}