django-cms неправильно перенаправляет на статический URL? - PullRequest
6 голосов
/ 18 декабря 2011

Я все еще относительно новичок в Django и только начал осматриваться в Django-CMS, однако я не могу пройти мимо основного введения из официальных документов .

Моя проблема может быть связана с sekizai, но мне кажется, что это основная проблема с URL в urls.py.

По сути, я почти точно следовал этому уроку.Единственное отличие состоит в том, что у меня есть приложение cms в разделе blog /, полный путь ~ / workspace / djangocms / blog /.Я правильно установил STATIC_URL и STATIC_ROOT в файле settings.py, и то же самое происходит с моими MEDIA_URL и MEDIA_ROOT.

. Я поднимаю путь и каталог носителя, потому что, если я установлю свою базуШаблон для ссылки на CSS на {{ MEDIA_URL }}css/somecss.min.css работает нормально.Однако, делать то же самое с STATIC_URL: {{ STATIC_URL }}css/somecss.min.css не работает и выдает 404 с.

Кроме того, насколько я могу судить, стандартная / статическая / маршруты работает нормально для других каталогов.Код, созданный {% cms_toolbar %}, генерирует штраф и CSS из таких мест, как /static/cms/css/plugins/cms.toolbar.css, которые обслуживаются должным образом.

Содержимое urls.py

from django.conf.urls.defaults import *                                         
from django.contrib import admin
from django.conf import settings

admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'blog.views.home', name='home'),
    # url(r'^blog/', include('blog.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:
    # url(r'^admin/', include(admin.site.urls)),
    (r'^admin/', include(admin.site.urls)),
    url(r'^', include('cms.urls')),
)
if settings.DEBUG:
    urlpatterns = patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': settings.MEDIA_ROOT,
        'show_indexes': True}),
        url(r'',
        include('django.contrib.staticfiles.urls')),
    ) + urlpatterns

Ответы [ 4 ]

8 голосов
/ 06 декабря 2012

Я пошел по кругу с этой проблемой после того же учебника.

Мой сайт загружал бы стандартную страницу приветствия, и я мог создавать страницы CMS.Однако, когда я пытался загрузить статические файлы в мои шаблоны, я получал 404 ошибки.

Ответ, данный ОП, мне очень помог.

Просто чтобы прояснить, это сработало для меня:

  1. Переименуйте статический каталог в проекте во что-то вроде local_static

  2. Добавьте следующее в settings.py

PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))

STATICFILES_DIRS = ( os.path.join(PROJECT_PATH, "local_static/"), )

Это сработало для меня.Теперь я могу перестать вырывать волосы

6 голосов
/ 21 декабря 2011

Получил мой ответ от #django на freenode.Ответьте сам здесь на случай, если кому-то понадобится:

В основном для django-cms, STATIC_ROOT в основном используется для активов из самого django-cms во время производства.Если django запускается с использованием метода python manage.py runserver, STATIC_ROOT не имеет значения.

Из документов Django : используйте collectstatic для сбора всех используемых статических активов (что для django-cmsвероятно, будет в каталоге, например / usr / local / lib / python ## / dist-packages).Это показывает, какие файлы STATIC_ROOT будет использовать во время производства.

Если вы хотите обслуживать другие каталоги с помощью STATIC_URL, вам нужно будет добавить их в раздел STATICFILES_DIRS в settings.py.(Обязательно прочитайте комментарии - используйте абсолютные пути, а не относительные пути).Это на самом деле относительно очевидно при создании чистого приложения Django, однако, потому что я хотел строго следовать учебному пособию по Django-cms, это было не так очевидно, как следовало бы.

1 голос
/ 13 сентября 2016

Решение настолько простое, что я тоже его пропустил.

из settings.py;

STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'mysitename', 'static'),
)

Если заглянуть внутрь «mysitename», есть еще одна папка с именем «static».Если вы разместите там свои файлы, все будет работать так, как вы ожидаете.Папка «static» на том же уровне, что и manage.py, представляет собой красную сельдь.

0 голосов
/ 01 мая 2015

Я написал тот же ответ здесь , но у меня возникли те же проблемы.Хотя я мог обслуживать статические файлы для всего остального, по каким-то причинам мои файлы django-cms продолжали возвращать 404. Я проверил settings.py и разрешения, но мне не очень повезло.

В Ubuntu 14.04 работаетNginx и Gunicion I также смогли решить проблему путем редактирования:

sudo nano /etc/nginx/sites-enabled/django

И я добавил следующий блок кода

location /static/cms {
    alias /usr/local/lib/python2.7/dist-packages/cms/static/cms/;
}

Затем я перезапустил Nginx и Gunicorn

sudo service nginx restart && sudo service gunicorn restart

и я смог увидеть все отсутствующие статические файлы

...