如何在 Django 模板中包含图像文件?

新手上路,请多包涵

我是 Django 的新手,我正在尝试通过我正在开发的一个名为“dubliners”的简单项目和一个名为“book”的应用程序来学习它。目录结构是这样的:

 dubliners/book/  [includes models.py, views.py, etc.]
dubliners/templates/book/

我有一个 JPG 文件需要显示在每个网页的标题中。我应该在哪里存储文件?我应该为标签使用哪个路径来使用模板显示它?我尝试了各种位置和路径,但到目前为止没有任何效果。

感谢您在下面发布的答案。但是,我已经尝试了图像的相对路径和绝对路径,但我仍然在网页中看到一个损坏的图像图标。例如,如果我的主目录中有一个图像并在我的模板中使用此标记:

 <img src="/home/tony/london.jpg" />

图像不显示。但是,如果我将网页另存为静态 HTML 文件,则会显示图像,因此路径是正确的。也许 Django 自带的默认 Web 服务器只有在特定路径上时才会显示图像?

原文由 Tony 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 257
2 个回答

在生产中,您只需将模板生成的 HTML 指向主机存储媒体文件的位置。所以你的模板只会有例如

<img src="../media/foo.png">

然后您只需确保该目录包含相关文件即可。

在开发过程中是一个不同的问题。 django 文档对其进行了简洁明了的解释,因此在此处链接并在此处键入它会更有效,但基本上您将为站点媒体定义一个视图,其中包含指向磁盘位置的硬编码路径。

在这里

原文由 JosefAssad 发布,翻译遵循 CC BY-SA 2.5 许可协议

试试这个,

设置.py

 # typically, os.path.join(os.path.dirname(__file__), 'media')
MEDIA_ROOT = '<your_path>/media'
MEDIA_URL = '/media/'

网址.py

 urlpatterns = patterns('',
               (r'^media/(?P<path>.*)$', 'django.views.static.serve',
                 {'document_root': settings.MEDIA_ROOT}),
              )

.html

 <img src="{{ MEDIA_URL }}<sub-dir-under-media-if-any>/<image-name.ext>" />

警告

谨防!使用 Context() 会给你一个空值 {{MEDIA_URL}} 。您必须改用 RequestContext()

我希望这个能帮上忙。

原文由 steve 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题