Wagtail文档链接下载而不是显示为页面

时间:2017-11-09 15:29:41

标签: django wagtail

似乎Wagtail CMS的默认配置是让文档链接触发文档的自动下载,而不是在浏览器中显示文档。有没有简单的方法来更改此配置?

4 个答案:

答案 0 :(得分:1)

下载文档链接非常标准,主要是因为浏览器中的预览文档对于每个浏览器来说都是不同的。

您可以添加模板过滤器,将URL解析为PDF并添加target="_blank"属性。

这可能适用于大多数浏览器,对于在线托管的PDF: https://stackoverflow.com/a/27392750/8070948

如何制作自定义过滤器: https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/#registering-custom-filters

答案 1 :(得分:1)

另一种解决方法可能是挂钩before_serve_document w ..(/ p>)

http://docs.wagtail.io/en/v2.0.1/reference/hooks.html#document-serving

您可以通过这种方式根据文档自定义响应,这是一个非常粗略的示例,显示了钩子的工作原理。

您仍然需要解决如何生成显示该文件的可查看网址。

from wagtail.wagtailcore import hooks
from django.shortcuts import redirect


@hooks.register('before_serve_document')
def serve_document(document, request):
    # eg. use document.file_extension, document.url, document.filename
    if document.file_extension == 'pdf':
        google_view_pdf_base = 'https://docs.google.com/viewer?url='
        # document.url is a relative URL so more work needed here
        # also URL should probably be URL encoded
        redirect_url = google_view_pdf_base + document.url
        # must return an instance of HTTPResponse
        return redirect(redirect_url)
    # no return means the normal page serve will operate

答案 2 :(得分:0)

根据上面LB接受的答案,以下代码将使您无需依靠Google Document Viewer即可提供要查看的文档。

您还可以通过传递查询字符串参数(例如, https://.../?download=True

from django.http import HttpResponse
from wagtail.wagtailcore import hooks


@hooks.register('before_serve_document')
def serve_pdf(document, request):
    if document.file_extension != 'pdf':
        return  # Empty return results in the existing response
    response = HttpResponse(document.file.read(), content_type='application/pdf')
    response['Content-Disposition'] = 'filename="' + document.file.name.split('/')[-1] + '"'
    if request.GET.get('download', False) in [True, 'True', 'true']:
        response['Content-Disposition'] = 'attachment; ' + response['Content-Disposition']
    return response

答案 3 :(得分:0)

在显示 pdf 的 html 文件中,只需在 url 之前添加文件:

例如:{{ file_name.file.url }}