Django静态文件只加载到网站的首页

时间:2011-12-26 03:59:35

标签: python django

我在WinVista上使用Django 1.3.1和Python 2.7。无论是在本地开发者还是部署到我的主机上,我都遇到了同样的问题。

在我网站的主页上,静态媒体显示:

http://www.drugpolicyreformmovement.com

在辅助页面上,CSS,图像等不显示:

http://www.drugpolicyreformmovement.com/newsarchive2003

http://www.drugpolicyreformmovement.com/newsarchive2010

http://www.drugpolicyreformmovement.com/newsarchive2009

'manage runserver'的输出在这些辅助'newsarchive'页面上显示静态媒体的404错误。不知何故,'document_root'在辅助页面上与主页面不同,因此它在那些辅助页面上查找'/ newsclippings2003 / static'而不是仅仅按照'/ static'查找所有内容,就像它应该的那样为首页。

我不知道我的URLconf与你有​​什么关系,所以我在这里包含了整个文件:

import os
from django.conf.urls.defaults import *
from django.views.generic import ListView, YearArchiveView
from newsclippings.models import Article
from drugpolicyreformmovement.views import ArticleYearArchiveView

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^$', ListView.as_view(
       queryset = Article.objects.order_by("-date", "publication", "author", "headline"),
       context_object_name='articles',
       template_name='index.html')),
    (r'^newsarchive(?P<year>\d+)/$', ArticleYearArchiveView.as_view()),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve',
       { 'document_root' : os.path.join( os.path.dirname(__file__), 'static') }),
    # url(r'^drugpolicyreformmovement/', include('drugpolicyreformmovement.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)),
)

同样,我认为这是有问题的一行:

(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    { 'document_root' : os.path.join( os.path.dirname(__file__), 'static') }),

我放置URLconf条目的顺序无关紧要。这条线的设计使我在部署时不必进行更改。

3 个答案:

答案 0 :(得分:2)

第一页的网址是

http://www.drugpolicyreformmovement.com/static/css/blueprint/print.css

在内页

http://www.drugpolicyreformmovement.com/newsarchive2003/static/css/blueprint/print.css

只需在网址中添加/或使用{{ STATIC_URL }}

即可

例如

  • /static/css/blueprint/print.css

  • <img src="{{ STATIC_URL }}css/blueprint/print.css" />

只需在设置中设置STATIC_ROOT

即可

见这里:

答案 1 :(得分:1)

当我查看源代码时,我会看到静态资产的相对路径。您需要使用绝对路径!

这是错的:

<link rel="stylesheet" href="static/css/blueprint/screen.css" media="screen, projection">

使用此功能:

<link rel="stylesheet" href="/static/css/blueprint/screen.css" media="screen, projection">

很可能是您的模板不正确,但您没有显示模板文件。

答案 2 :(得分:1)

您应该在模板中使用{{STATIC_URL}}模板标记,而不是试图让它以这种方式提供网址。在部署时,您仍然不必进行更改,这样您就可以移动内容而不用担心有另一个上下文变量来处理。