如何在Django中渲染从Egnyte获取的字节编码PDF?
问题分析与解决方法
你直接把字节类型的PDF内容传给iframe/embed的src是行不通的,浏览器无法解析原始字节格式的src值,这就是页面空白的原因。下面是两种可行的解决方式:
方式一:转成Data URI(适合小体积PDF)
把PDF字节内容编码为Base64,拼接成浏览器能识别的Data URI格式:
- 在Django视图中处理编码:
import base64 # 假设已从Egnyte获取到response.content(PDF字节数据) pdf_base64 = base64.b64encode(response.content).decode('utf-8') pdf_data_uri = f'data:application/pdf;base64,{pdf_base64}' return render(request, 'template.html', {'pdf_src': pdf_data_uri})
- 模板中引用:
<iframe src="{{ pdf_src }}" width="100%" height="600px"></iframe>
注意:如果PDF文件过大,Data URI会导致浏览器加载缓慢、内存占用过高,这种情况建议用第二种方式。
方式二:通过Django视图返回PDF流(适合大体积PDF)
单独写一个视图来返回PDF内容,让iframe的src指向这个视图的URL:
- 编写PDF服务视图:
from django.http import HttpResponse def serve_egnyte_pdf(request): # 这里写从Egnyte获取PDF内容的逻辑,拿到response.content pdf_content = response.content # 构造响应,指定内容类型为PDF,设置内联显示 response = HttpResponse(pdf_content, content_type='application/pdf') response['Content-Disposition'] = 'inline; filename="egnyte_document.pdf"' return response
- 配置路由(urls.py):
from django.urls import path from .views import serve_egnyte_pdf urlpatterns = [ # 其他路由... path('egnyte-pdf/', serve_egnyte_pdf, name='serve_egnyte_pdf'), ]
- 模板中引用:
<iframe src="{% url 'serve_egnyte_pdf' %}" width="100%" height="600px"></iframe>
为什么原来的方法失效?
你之前传入的b'%PDF-1.6\r...'是Python字节对象的字符串表示,浏览器会把它当作无效的URL处理,自然无法加载PDF内容,最终显示空白。
内容的提问来源于stack exchange,提问作者DaCoPro
相关产品推荐
相关产品推荐

