Django-Rest-Framework 中缺少引导资源。

14
我正在使用新版的django-rest-framework 2.0,并遵循创建基于rest的API的教程。API现在已经完成,但是我无法让引导资源加载,所有引导资源都从Django返回404 Not Found。
我觉得应该从django-rest-framework模块的静态目录中加载资源。当我在“python2.7/dist-packages/rest_framework/static/rest_framework”上列出时,我看到了我需要的css、js和img目录,但我找不到文档中任何显示如何将模块中的CSS链接到我的项目的地方。
在这里最好采取什么行动?我应该下载源代码并将文件夹复制到我的/static目录中吗?符号链接是不可行的,因为我需要将项目检入到中央存储库中。有什么想法吗?
3个回答

20

首先,我假设您的意思是可浏览API无法加载Bootstrap静态资源?(虽然我猜测您可能正在尝试在项目中其他地方使用它们?)

如果您正在运行DEBUG=True,它们应该会自动提供服务,但是一旦您运行DEBUG=False,您需要确保运行manage.py collectstatic并确保您的STATIC_ROOTSTATIC_URL设置正确。

Django的静态文件文档应该会有所帮助:https://docs.djangoproject.com/en/dev/howto/static-files/

如果问题仍然存在,我建议您仔细检查您的Django版本(支持1.3及以上版本)和REST框架版本(任何2.0及以上版本),并确保您按照教程逐步进行,特别是在项目设置方面要小心。


在提问之前,我应该更仔细地阅读文档。我错过了将“django.contrib.staticfiles”添加到我的settings.py中,立即发现问题得到了解决!感谢您的帮助,您的REST框架在创建我们的新API时非常有价值! - steve-gregory
manage.py collectstatic 实际上是复制文件,但在我的应用程序中,我发现将符号链接添加到包安装(位于 dist-packages 下)中的静态目录要容易得多。 - elewinso
还要确保您在适当的位置有一个名为“static”的文件夹,我需要遵循上面的说明以及这里的链接来解决我的Heroku无法提供静态文件的问题。 - waffl

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())

-1

CSS找不到。修复方法是使缺失的CSS文件(在浏览器控制台中看到的404文件)可用。就这样。

您可以在后端(需要一些调整)或前端(相对容易)使CSS文件可访问。

如果您有一个独立的前端和后端(RESTful)设置,比如Django-Django rest framework和AngularJS,这个解决方案非常完美。

假设Django后端运行在8000端口,前端运行在9000端口。

  • frontend.example.com加载运行在9000端口的前端JS应用程序

  • backend.example.com加载运行在8000端口的Django应用程序

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/

完成。

我所做的基本上是将Django应用程序的所有CSS复制到前端。前端已经是静态文件的集合,因此很容易提供此服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接