0

就这样,我完成了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 的新应用程序,并以相同的方式(使用TemplateView)简单地显示来自urls.py 的静态页面。这种方法更好吗?在静态页面中显示图像时,我仍然遇到与第一种方法相同的问题,这让我认为它与 TemplateView 有关。

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

提前致谢!

4

2 回答 2

3

用 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".

希望能帮助到你!

于 2013-05-15T00:36:33.327 回答
0

该博客解释了提供静态文件,可能会有所帮助:

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

于 2013-05-15T09:14:46.007 回答