在静态文件中加载图像
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/
【讨论】:
以上是关于在静态文件中加载图像的主要内容,如果未能解决你的问题,请参考以下文章