下载Django

时间:2018-02-17 13:55:24

标签: python django django-templates django-views

我正在尝试从我的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

我的项目看起来像这样: enter image description here

不幸的是,我不了解静态前期的路径

    <a href="{% static 'django-pdf/generator/static/pdfs/nowy.pdf' %}">{{ file }}</a>

更准确一点,静态如何在这里起作用,这意味着什么。当前输出只显示找不到该文件。应用程序无法在调试模式atm中工作。

2 个答案:

答案 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

static file path