2013-05-15 93 views
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应用/模板/着陆/ index.html的”静态的index.html。

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

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

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

在此先感谢!

+0

你可以把代码的HTML图像和配置settings.py静态? –

+0

我不明白这是如何工作的。 – bahudso

+0

你是否创建了一个静态文件夹?和settings.py是你创建变量静态? –

回答

3

用Django提供静态文件有些尴尬。这是因为他们有这样的概念:出于性能/安全原因,图像等静态文件必须位于另一个域或服务器中。

提供静态内容和Django这样做:在settings.py

# 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) 

然后定义在图像/ 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"

希望它有帮助!

+0

这不会在href中静态工作,除非你使用{%load staticfiles%} –

+0

我有很多次使用静态内容,而且我从未使用过'{%load staticfiles%}'。我不知道Django1.5但是1.4我不需要它,也许只是我。 –

+1

该问题直接使用媒体或静态,你应该始终是相同的文件夹,但媒体路径是例如MEDIA_URL ='/ notice /'你的句子不工作,因为你应该以这种方式调用变量g​​lobal {{STATIC_URL}}或{ {MEDIA_URL}}或如何使用{%load staticfiles%}告诉你。这种形式你有一个可变的动态,你可以改变你想要什么时候 –