如何允许用户在我的静态文件夹中下载或查看我在线托管的PDF?

时间:2017-02-18 21:28:21

标签: django

我有一个模式,用于存储file_name,file_link,is_active和上传的字段。我可以通过管理站点添加PDF,但我试图让用户能够从我创建的前端网页上下载PDF或在新选项卡上查看PDF。

目前,我创建的视图是获取每个PDF的信息,以便我可以显示名称,链接等。如果我将{{pdf.file_link}}放入其中,它就不会做任何事情

我真的很感激能得到一些帮助,这样我就可以停下来旋转我的车轮了。提前谢谢!+

编辑: 机型:

class HelpfulPDF(models.Model):
    file_name = models.CharField(max_length=256)
    file_link = models.FileField(upload_to='pdfs')

    uploaded_on = models.DateField(auto_now=True)

    is_active = models.BooleanField(default=True)

    def __str__(self):
        return "{} - {}".format(self.id, self.file_name)

查看: 正如您在视图中看到的,我只是从模型中获取日期。我还没有对实际的PDF做任何特别的事情。这是个问题。

@login_required()
    def help_center_view(request):
    data = dict()
    data['userprofile'] = request.user.userProfile
    data['get_pdfs'] = HelpfulPDF.objects.filter(is_active=True)

    return render(request, 'help_center.html', data.items())

模板:

{% extends 'base.html' %}

{% load staticfiles %}

{% block content %}
    <hr>
        <div class="text-center">
            <b>Please look at the below PDF's.</b> <i>(You can view   in browser or download to your computer)</i>
        </div>
    <hr>
    <br><br>
    <div class="text-center">
    {% if get_pdfs %}
        {% for each_pdf in get_pdfs %}
            <div style="display: inline-block; width:275px; height: auto; border: thin grey solid; border-radius: 15px ">
                <br>
                {% if each_pdf.file_name %}
                    <h6>{{ each_pdf.file_name }}</h6>
                {% else %}
                    <h6>Helpful PDF</h6>
                {% endif %}
                <hr>
                <div style="margin-top: 13em">
                    <hr>
                    <button class="btn-primary btn-sm">Download PDF</button>
                    <a href="#"><button class="btn-primary btn-sm">View PDF Online</button></a>
                </div>
                <br>
            </div>
        {% endfor %}
    {% else %}
        <h4>There are no PDF's to display at this time.</h4>
    {% endif %}


    </div>
{% endblock %}

2 个答案:

答案 0 :(得分:0)

如果您的pdf文件链接有效(尝试在浏览器中查看,看看会发生什么),那么应该可以在模板中执行相应的操作:

<a href={{ your_link }}></a>

添加target="_blank"属性,使其在另一个标签页中打开。

如果您希望在点击时下载,可以向锚元素添加download属性。

浏览器应自动处理打开或下载PDF。如果没有,那么您的链接无效(最可能的原因)或(更不可能因为您可能知道它)您的服务器在响应中发送错误的内容类型标头(您可以从浏览器检查) Chrome网络标签中的开发控制台。

答案 1 :(得分:0)

您可以创建一个视图来代理PDF文件并返回特定标题,请参阅以下答案:How to show a PDF file in a Django view