Отсутствие загрузочных ресурсов в 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 служит легко, поскольку интерфейс уже представляет собой набор статических файлов.