uwa*_*345 5 python django django-templates
我已经设置了媒体根目录、媒体网址等,因此当我致电时该文件会显示
http://127.0.0.1:8000/media/something/somewhere/my_pdf.pdf
现在我想在模板中显示相同的文件(即对象或嵌入标签中的 PDF 以及其他一些内容)。我将路径传递给文件(即视图上下文中“media”之后的所有内容,例如:
def test_doc(request):`
p = r'something/somewhere/my_pdf.pdf'`
return render(request, 'documents/test.html', {'pdf':p})
Run Code Online (Sandbox Code Playgroud)
那么我必须在模板中添加什么内容?我试过
<object data="{{ MEDIA_URL }}{{ pdf }}">something</object>
Run Code Online (Sandbox Code Playgroud)
及其许多变体。我究竟做错了什么?
小智 5
我测试了你的方法,我相信我能够重现你的问题。
\n<object data="{{ MEDIA_URL }}{{ pdf }}"></object>加载到模板中的对象时 PDF 不显示<object data="{% get_media_prefix %}{{ pdf }}">加载到模板中的对象时 PDF 不显示有两个问题同时发生。
\nDjango 的文档告诉我们@xframe_options_exempt对视图使用装饰器。它对我的测试没有帮助。<object data="media/myapp/my_pdf.pdf">通过在 settings.py 中注释掉“django.middleware.clickjacking.XFrameOptionsMiddleware”来禁用点击劫持保护,允许我在模板中的对象中显示 PDF 。
{{ MEDIA_URL }}{{ pdf }}标签{% get_media_prefix %}{{ pdf }}都会导致从磁盘加载 PDF,路径为“/media/myapp/my_pdf.pdf”。注意开头额外的“/”。您可以通过p = \'media/myapp/my_pdf.pdf\'在视图中定义并<object data="{{ pdf }}">在模板中使用来防止这种情况。不太优雅,但在禁用点击劫持中间件时有效。According to your code it doesn't look like MEDIA_URL is defined in your views context.
from django.conf import settings
def test_doc(request):`
p = r'something/somewhere/my_pdf.pdf'`
return render(request, 'documents/test.html', {'pdf':p, 'MEDIA_URL': settings.MEDIA_URL})
Run Code Online (Sandbox Code Playgroud)