Статические файлы Django (404 не найдено) - Openshift

Я пытаюсь запустить свой самый первый проект с использованием Python / Django в Openshift, и у меня возникли проблемы с загрузкой моих статических файлов.

Я прочитал https://docs.djangoproject.com/en/dev/howto/static-files/ несколько раз я ломал себе голову над этим целый день, но не могу понять проблему.

Я запускаю сервер разработчика:

python manage.py runserver

setting.py

STATIC_URL = '/static/'

if 'OPENSHIFT_REPO_DIR' in os.environ:
    STATIC_ROOT = os.path.join(os.environ.get('OPENSHIFT_REPO_DIR'), 'wsgi', 'static')
else:
    STATIC_ROOT = os.path.join(WSGI_DIR, 'static')

шаблон

{% load static %}
<a href=""><img src="{% static "logo2.png" %}"></a>

urls.py

from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import RedirectView
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
    url(r'^$', RedirectView.as_view(url='/index/')),
    url(r'^index/', include('index.urls')),
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls)),
]

urlpatterns += staticfiles_urlpatterns()

Самое странное, что после того, как мое приложение перешло на openshift, все работает нормально, но на localhost что-то идет не так.

Короче говоря:

  • 127.0.0.1:8000/static/logo2.png - Не найдено
  • mysite.rhcloud.com/static/logo.png - Да, я вижу изображение

Надеюсь, все ясно, и моя проблема такая же глупая, как я себе представляю.

Django 1.8, ОС Windows

РЕШЕНИЕ:

Я удалил django.contrib.staticfiles из INSTALLED_APPS и добавил в urls.py этот кусок кода:

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

person dekarz    schedule 07.02.2017    source источник


Ответы (1)


Вы в режиме разработки? Если да, и если у вас нет django.contrib.staticfiles в INSTALLED_APPS, вам нужно добавить это в urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
...   
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Объяснение объясняется здесь.

person Gil Guilherme    schedule 07.02.2017
comment
Да, я думаю, что нахожусь в режиме разработки (DEBUG = True), и у меня есть django.contrib.staticfiles в INSTALLED_APPS. Этот кусок кода не решает проблему, и статические файлы по-прежнему не обнаруживаются. - person dekarz; 07.02.2017
comment
Это редко бывает хорошей идеей. Если у вас DEBUG = True, Django обычно может обслуживать статические файлы из STATIC_URL без необходимости добавлять что-либо в urlpatterns. Проблема, вероятно, в том, что вы помещаете статические файлы в WSGI_DIR/static, а не в каталог приложения, который является каноническим местом. - person Antonis Christofides; 08.02.2017
comment
Может быть, и из-за этого, но однажды у меня была такая же проблема, и я исправил ее только этим решением. Если это не очень хорошая идея, почему это указано в официальных документах django? - person Gil Guilherme; 08.02.2017