似乎Wagtail CMS的默认配置是让文档链接触发文档的自动下载,而不是在浏览器中显示文档。有没有简单的方法来更改此配置?
答案 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 }}