【问题标题】:Linking an image in Django在 Django 中链接图像
【发布时间】:2011-08-09 22:35:40
【问题描述】:

我有一个名为 mysite 的新 django 项目。在 mysite 中有一个名为 static 的文件夹,我的所有图片都在其中。

mysite 内部还有一个模板文件夹,其中包含一个名为 index.html 的文件,其基本代码如下:

<html>
<head></head>
<body><img src = WHAT GOES HERE?? />
</html>

我的 mysite 文件夹中有这个 views.py 文件:

from django.shortcuts import render_to_response
def index(request):
    return render_to_response('index.html',)

在我的 settings.py 文件中,STATIC_URL = '/static/'

应该在我的 img 标签中正确引用静态图像文件的确切文本是什么(注意:我不是在寻找文档链接)。我是否需要更改任何文件夹/设置结构?谢谢。

我添加了以下标签:

但是,它仍然没有加载——尽管它似乎正在进入正确的路径(浏览器中的图像路径显示为 127.0.0.1:8000/static/logo.jpg。)。我需要更改什么才能正确加载?我已经检查以确保图像在那个位置。

更新:这就是我最终让它工作的方式:

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

(我使用的是 media_url 而不是 static_url)。有没有更简单的方法来做到这一点?

【问题讨论】:

    标签: django


    【解决方案1】:

    如果图像被称为“hi.jpg”,它看起来像这样:

    img src="{{ STATIC_URL }}hi.jpg"

    这将解析为上传到 STATIC_URL 目录的文件,在您的示例中为:

    /static/hi.jpg

    【讨论】:

    • 我添加了以下标签:。但是,它仍然没有加载——尽管它似乎正在进入正确的路径(浏览器中的图像路径显示为127.0.0.1:8000/static/logo.jpg.)。我需要更改什么才能正确加载?我已经检查以确保图像在那个位置。
    • 我不确定“不加载”具体是什么意思。一个好的测试是,在服务器运行时,直接访问 url,在本例中为“127.0.0.1:8000/static/logo.jpg”。你看到图像了吗?如果不这样做,则说明您没有正确设置静态托管。
    【解决方案2】:

    大卫542,

    您的结构应该如下所示。

    MyProject
        \MySite
            \static
    

    当您使用 runserver 时,将提供此静态文件夹。当您将工作转移到生产环境中时,您可能希望使用 django 的 ./manage.py collectstatic 并确保在您在 settings.py 文件中指定的静态 url 上提供静态媒体。所以如果你的静态文件夹中有一张图片,你应该可以通过说/static/some_image.png来引用

    直到 1.3 版 Django 才包含静态文件。如果您的年龄超过 1.3,这将解释为什么您当前的设置不适合您。 (我猜这是你的问题。)

    希望这会有所帮助。

    编辑:如果通过输入您的路径为您服务并且您感到舒适,那么您确实应该使用另一个答案所说的并使用{{ STATIC_URL }}hi.jpg,就好像您选择更改静态网址一样,您不必更改您的要匹配的模板,因为它们会自动工作。

    【讨论】:

    • @wilbbe01 我的 Django 版本是... >>> django.VERSION (1, 3, 0, 'final', 0)
    • 你的图片有什么权限?
    • 是的,我正在使用 manage.py 运行服务器。图片的权限是-rw-r--r--
    • 如果你在网络浏览器中输入127.0.0.1:8000/static/,django 会告诉你什么?
    • 找不到页面 (404) 请求方法:GET 请求 URL:127.0.0.1:8000/static 使用 mysite.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,顺序如下:^hello/$ ^$ ^ hello/about/$ new ^time/$ 当前 URL,static/,与其中任何一个都不匹配。
    【解决方案3】:

    首先,read the documentation on serving static files,然后,当您觉得自己理解在本地和生产环境中提供静态文件背后的概念时,read the docs once more

    然后确保您已将django.contrib.staticfiles 添加到您的INSTALLED_APPS

    【讨论】:

      【解决方案4】:

      如果图片名为“pic.jpg”,则为

      img src = "{{'static/pic.jpg'}}"
      

      这对我有用...还要检查一下 django.contrib.staticfiles,在settings.py的installed_apps中

      【讨论】:

      • 这不会在之前的答案中添加任何内容
      猜你喜欢
      • 2021-07-02
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多