我正在尝试从我的Django应用程序的模板中下载静态文件。
def list(request):
folder = '/home/galander/Desktop/Projekty/django-pdf-generator/django-pdf/generator/static/pdfs'
file_list = os.listdir(folder)
return render_to_response('list.html', {'file_list': file_list})
def download_file(request):
pdf_folder = '/home/galander/Desktop/Projekty/django-pdf-generator/django-pdf/generator/static/pdfs'
response = HttpResponse(pdf_folder, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="nowy.pdf"'
return response
list.html
{% for file in file_list %}
<a href="/home/galander/Desktop/Projekty/django-pdf-generator/django-pdf/generator/static/pdfs/{{ file }}">{{ file }}</a>
{% endfor %}
我目前的输出相当明显 - Django正在寻找匹配的url模式,但它失败了。 download_file(request)中的my filename =“nowy.odf”:仅用于测试目的,是硬编码的atm。
2我正在考虑的解决方案:
1)在url.py中为url模式创建适当的正则表达式,以满足重定向到我无法完成的download_file视图 2)我应该以某种方式更改static / pdf文件夹的显示方法
更新
我之前添加了STATIC_URL和STATIC_ROOT也运行了collectstatic(我的应用程序正在生成pdf并将它们保存到静态文件夹中,这是必需的)。我还添加了URL模式部分(使用serve,而不是static_view.serve becuase docs这样说)。
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
if settings.DEBUG:
urlpatterns += [
url(
r'^media/(?P<path>.*)$', serve, # NOQA
{'document_root': settings.MEDIA_ROOT,
'show_indexes': True}
),
] + staticfiles_urlpatterns() # NOQA
不幸的是,我不了解静态前期的路径
<a href="{% static 'django-pdf/generator/static/pdfs/nowy.pdf' %}">{{ file }}</a>
更准确一点,静态如何在这里起作用,这意味着什么。当前输出只显示找不到该文件。应用程序无法在调试模式atm中工作。
答案 0 :(得分:1)
您需要使用django的静态文件应用程序。
通常在您的settings.py
中,您将定义类似的静态路径;
STATIC_ROOT = os.path.join(BASE_DIR, 'static-collection')
STATIC_URL = '/static/'
然后您运行manage.py collectstatic
,将您的所有静态文件收集到STATIC_ROOT
目录中,您可以从STATIC_URL
收集项目。
在调试模式下,您可以将以下内容添加到urls.py
;
urlpatterns = []
# This is only needed when using runserver.
if settings.DEBUG:
urlpatterns += [
url(
r'^media/(?P<path>.*)$', static_views.serve, # NOQA
{'document_root': settings.MEDIA_ROOT,
'show_indexes': True}
),
] + staticfiles_urlpatterns() # NOQA
因此,查看您发布的内容,您的项目可能是Projekty
,其中一个应用是django-pdf-generator
。如果您的应用中有静态目录,django会在STATIC_ROOT
期间将静态文件收集到collectstatic
。所以也许有像Projekty/django-pdf-generator/static/django-pdf/generator/pdfs
基于此,您可以在模板中执行;
<!DOCTYPE html>
{% load static from staticfiles %}
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
<title>My website</title>
<!-- ALL OF THE STYLES -->
<link rel="stylesheet" href="{% static "css/style.css" %}">
</head>
<body>
<p>Click <a href="{% static 'pdfs/nowy.pdf' %}">here</a> to download my PDF</p>
</body>
希望您可以在模板中看到路径如何与应用中的静态路径匹配?
答案 1 :(得分:0)
您可以使用简单的html标签下载静态文件
{% load static %} <!-- In top-->
<a href="{% static "mysite/resume.docx" %}" alt="My image">Click Here</a>
并将文件(例如,resume.docx)保存在myapp/static/mysite