Загрузка статических файлов Django только для главной страницы сайта - PullRequest
1 голос
/ 26 декабря 2011

Я использую Django 1.3.1 и Python 2.7 на WinVista. Я испытываю ту же проблему, будь то на локальном сервере разработчика или при развертывании на моем хосте.

На главной странице моего сайта статические медиа показывает:

http://www.drugpolicyreformmovement.com

На дополнительных страницах CSS, изображения и т. Д. Не отображаются:

http://www.drugpolicyreformmovement.com/newsarchive2003

http://www.drugpolicyreformmovement.com/newsarchive2010

или

http://www.drugpolicyreformmovement.com/newsarchive2009

Выходные данные 'manage runserver' показывают ошибку 404 для статического носителя на этих вторичных страницах 'newsarchive' Каким-то образом «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 ]

2 голосов
/ 26 декабря 2011

Ваш URL на первой странице

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

на внутренней странице

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

просто добавьте / в URL или используйте, например, {{ STATIC_URL }}

  • /static/css/blueprint/print.css

или

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

просто установите STATIC_ROOT в настройках

см. Здесь:

1 голос
/ 26 декабря 2011

Вместо того, чтобы пытаться заставить его обслуживать URL таким образом, вы должны использовать тег шаблона {{STATIC_URL}} в своих шаблонах. Вам по-прежнему не придется вносить изменения при развертывании, и таким образом вы можете перемещать объекты и не беспокоиться о наличии другой переменной контекста для работы.

1 голос
/ 26 декабря 2011

Когда я просматриваю ваш HTML-источник, я вижу относительные пути для ваших статических ресурсов.Вам необходимо использовать абсолютные пути!

Это неправильно:

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

Используйте это:

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

Скорее всего, ваш шаблон неверен, но вы не показали файл шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...