Отсутствие загрузочных ресурсов в Django-Rest-Framework

Я использую новый django-rest-framework 2.0 и следуют руководству по созданию API, основанный на отдыхе. API теперь завершен, однако мне трудно получить загрузочные ресурсы для загрузки, все возвращаются с 404 Not Found из Django.

Мне кажется, что ресурсы должны быть загружены из статического каталога модуля django-rest-framework, и когда я делаю список на 'python2.7/dist-packages/rest_framework/static/rest_framework', я вижу css, js, и мне нужны каталоги img, но я не смог найти места в документации, которая показывает, как связать CSS с модулем с моим проектом.

Каков наилучший способ действий здесь? Должен ли я загрузить источник и скопировать папку в мой/статический каталог? Symlinking не может быть и речи, потому что мне нужно проверить проект на центральное репо. Идеи?

Ответ 1

Прежде всего, я предполагаю, что вы имеете в виду, что статические ресурсы bootstrap не загружаются для API-интерфейса, доступного для просмотра? (Хотя, я думаю, может быть, вы пытаетесь использовать их в другом месте вашего проекта?)

Если вы работаете с DEBUG=True, их следует обслуживать автоматически, но после запуска с DEBUG=False вам нужно выполнить manage.py collectstatic и убедиться, что ваши настройки STATIC_ROOT и STATIC_URL правильный.

Документация по статическим файлам Django должна помочь: https://docs.djangoproject.com/en/dev/howto/static-files/

Если вам все еще не повезло, я предлагаю вам дважды проверить версию Django (поддерживается 1.3 и выше) и версия REST framework (Anything from version 2 onwards), и убедитесь, что вы проходите через учебник шаг за шагом, особенно учитывая настройку проекта.

Ответ 2

Если вы используете Heroku, вам нужно убедиться, что вы используете конфигурации в документации для начала работы (https://devcenter.heroku.com/articles/getting-started-with-django), См. Раздел "settings.py" и "wsgi.py". У меня была такая же проблема, и это решило ее.

settings.py

import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

wsgi.py

from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())

Ответ 3

CSS не найден. Исправить было бы сделать отсутствующие файлы css (404 для файлов, видимых в консоли браузера). Что это.

Вы можете сделать css файлы доступными в бэкэнд (нужны некоторые настройки) или в интерфейсе (сравнительно просто).

Это решение работает идеально, если у вас есть отдельная настройка интерфейса и бэкэнда (успокоительная), такая как инфраструктура отдыха Django-Django и AngularJS..

Скажем, если django backend работает на 8000, а передний конец работает на 9000.

  • frontend.example.com загружает приложение JS на передней панели, работающее на 9000

  • backend.example.com загружает приложение django на 8000

in settings.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

STATIC_URL = 'http://frontend.example.com/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

затем в терминале

$ python manage.py collectstatic

Затем перейдите в каталог, где у вас есть папка static

$ cp -rf static/* /frontend-code-directory/static/

DONE.

Что я сделал в основном, это копирование всех css приложений django во внешний интерфейс. Frontend служит легко, поскольку интерфейс уже представляет собой набор статических файлов.