gpt4 book ai didi

python - 无法弄清楚在 Django 开发环境中提供静态图像

转载 作者:行者123 更新时间:2023-11-28 19:33:43 25 4
gpt4 key购买 nike

我读过 the article (以及关于该主题的其他一些人),但仍然无法弄清楚如何显示图像,除非将指向网络服务上现有文件的链接硬编码到 html 模板中。

我在 urls.py 中:

...        
(r'^galleries/(landscapes)/(?P<path>.jpg)$',
'django.views.static.serve', {'document_root': settings.MEDIA_URL}),

...

其中“landscapes”是我要显示其中图像的相册之一。 (还有几个。)

views.py 中,它使用如下代码调用模板:

...
<li><img src=160.jpg alt='' title='' /></li>
...

将html中的图片链接解析成:

http://127.0.0.1:8000/galleries/landscapes/160.jpg

settings.py 我有:

MEDIA_ROOT = 'C:/siteURL/galleries/'
MEDIA_URL = 'http://some-good-URL/galleries/'

在文件系统中有一个文件 C:/siteURL/galleries/landscapes/160.jpg 我在 http://some-good-URL/galleries/landscapes/160.jpg 有相同的文件

无论我在 urls.py 中使用什么——MEDIA_ROOT 或 MEDIA_URL(期望提供本地镜像或来自网络服务器)——我在浏览器的源代码中得到以下信息:

<li><img src=160.jpg /></li>

浏览器中没有显示图像。

我做错了什么?

最佳答案

这是一篇很长的文章,基本上总结了我为使静态文件工作而了解的有关 Django 的所有知识(我花了一段时间才了解所有不同部分如何组合在一起)。

要在您的开发服务器(以及以后的真实服务器)中提供静态图像,您需要做一些事情(特别注意第三和第四步):

设置 MEDIA_ROOT

MEDIA_ROOT 是一个常量,它告诉 Django 文件的物理路径(在您的文件系统上)。使用您的示例,MEDIA_ROOT 需要设置为“C:/siteURL/galleries/”,就像您写的那样。 MEDIA_ROOT 将在以下步骤之一中使用,这就是我们设置它的原因。

设置 MEDIA_URL

MEDIA_URL 是您的图片所在的“url”。换句话说,无论何时您想要获取图像,要查找的 url 都 MEDIA_URL 开头。通常这不会以“http”开头,因为您是从自己的服务器提供服务的(我的 MEDIA_URL 通常设置为“/site_media/”,意思是从根域开始,然后转到 site_media 等)

使用 MEDIA_URL

MEDIA_URL 不是靠魔法工作的,您实际上必须使用它。例如,当您编写获取文件的 HTML 时,它需要看起来像这样:

<li><img src="{{MEDIA_URL}}/160.jpg" /></li>

看看我是如何告诉模板使用 MEDIA_URL 前缀的?这最终转化为 'http://some-good-URL/galleries/160.jpg'

请注意,为了能够在您的模板中实际使用 MEDIA_URL,您必须将行 'django.core.context_processors.media' 添加到您的 TEMPLATE_CONTEXT_PROCESSORS 在你的 settings.py 文件中设置,如果我没记错的话。

让您的开发服务器提供静态文件

在真实环境中,您将配置地址为“static_media”的文件,以便在不通过 Django 的情况下提供服务。但是在开发环境中,您也希望从 Django 为它们提供服务,因此您应该将此通用行添加到 urls.py 文件的末尾:

if settings.DEBUG:
# Serve static files in debug.
urlpatterns += patterns('',
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT,
'show_indexes' : True}),
)

请注意它是如何使用 url“site_media/*”(实际上是我的 MEDIA_URL)获取任何内容并从我的 MEDIA_ROOT 文件夹提供它的,这是 MEDIA_ROOT 设置发挥作用的地方。

最后的说明

让我困惑的是,这里的很多东西都是为了方便。例如,MEDIA_ROOT 仅用于您的调试 url 模式,以告诉 Django 从何处加载。 MEDIA_URL 只是鼓励您不要在所有 HTML 文件中放入绝对 URL,因为这样当您决定将文件移动到不同的服务器时,您必须手动更改它们(而不是仅仅更改 MEDIA_URL常量)。

当然,这些都不是必需的:您可以使用自己的文件夹对调试 url 模式进行硬编码,确保静态文件确实是来自 url 的服务器(通过在浏览器中访问它),然后使用 MEDIA_URL 设置将其手动编码到 HTML 文件中,只是为了确保一切正常。

关于python - 无法弄清楚在 Django 开发环境中提供静态图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com