在静态文件中加载图像

Posted

技术标签:

【中文标题】在静态文件中加载图像【英文标题】:Loading images in a static file 【发布时间】:2013-05-09 10:08:37 【问题描述】:

所以我已经完成了Django教程,玩了一下,感觉我对Django有了很好的理解。我面临的唯一问题是,当我尝试为着陆页显示静态页面时,我似乎无法加载任何图像。

首先,我尝试了两种不同的方法来显示静态登录页面。 第一:

# main app urls.py
    from django.conf.urls import patterns, include, url

    from django.contrib import admin
    admin.autodiscover()

    urlpatterns = patterns('',
        url(r'^$', TemplateView.as_view(template_name="landing/index.html")),
        url(r'^polls/', include('polls.urls', namespace="polls")),
        url(r'^admin/', include(admin.site.urls)),
    )  

这是主应用程序的 urls.py,我使用 TemplateView 显示位于“my_app/templates/landing/index.html”的静态 index.html。

这一切都很好,直到我尝试将静态图像添加到 index.html 文件中。无论我将图像文件放在哪里,我似乎都无法显示它。在 index.html 模板中,我尝试了使用静态的不同方法以及尝试不同的直接路径,而无需嵌入式 python 代码。我应该如何显示图像以及它们应该放在哪里?

我发现仅用于显示静态页面(而不是图像)的第二种方法是创建一个名为landing 的新应用程序,并以相同的方式简单地显示来自 urls.py 的静态页面(使用 TemplateView) .这种方法更好吗?在静态页面中显示图像时,我仍然遇到与第一种方法相同的问题,这让我认为它与 TemplateView 有关系。

我这样做完全错了吗?我有哪些选择?我正在使用 Django 1.5.1。

提前致谢!

【问题讨论】:

你可以把html图片的代码和配置的静态放在settings.py中吗? 我完全不明白它是如何工作的。 你创建的是静态文件夹吗?和 settings.py 你创建变量静态??? 【参考方案1】:

用 Django 提供静态文件有点尴尬。这是因为他们认为出于性能/安全原因,静态文件(例如图像)必须位于另一个域或服务器中。

要使用 django 提供静态内容,请执行以下操作:

# urls.py
# add this lines at the end

from django.conf.urls.static import static
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

然后在settings.py中定义images/css/js等静态内容所在的目录:

# settings.py

import os
settings_dir = os.path.dirname(__file__)
PROJECT_ROOT = os.path.abspath(os.path.dirname(settings_dir))

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    # this assumes your static contents is in <your_project>/static/
    os.path.join(PROJECT_ROOT, 'static/'),
    )

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')
MEDIA_URL = '/media/'

注意:您也可以将图像视为媒体并将它们放在您的media/ 文件夹中。

这应该会为您的应用提供静态文件。只需像 href="/static/xxxx.jpg"href="/media/xxxx.jpg" 这样引用它们。

希望对你有帮助!

【讨论】:

除非你使用 % load staticfiles % 我已经多次使用静态内容,但我从未使用过% load staticfiles %。我不知道 Django1.5 但 1.4 我不需要它,也许只是我。 问题直接使用媒体或静态您认为始终是同一个文件夹,但媒体路径是例如 MEDIA_URL = '/notice/' 你的句子不起作用,因为你应该以这些方式调用变量 global STATIC_URL 或 MEDIA_URL 或之前如何用 % load staticfiles % 告诉你。这种形式你有一个可变的动态,你可以在你想要的时候改变 你是对的。这样可以硬连线模板中的代码,尽管它会起作用。我会尝试% load staticfiles %。感谢您的提醒:)【参考方案2】:

此博客解释了提供静态文件并可能有所帮助:

http://agiliq.com/blog/2013/03/serving-static-files-in-django/

【讨论】:

以上是关于在静态文件中加载图像的主要内容,如果未能解决你的问题,请参考以下文章

041:模版中加载静态文件详解

在 django 开发中加载静态文件时出现 404 错误

在 Django 中的 css 文件中加载静态文件

无法在tomcat中加载静态文件

在 Webpack 中加载静态 JSON 文件

CSS静态文件未在Django中加载