繁体   English   中英

Django staticfiles应用程序帮助

[英]Django staticfiles app help

我对Django的staticfiles应用程序有一些小问题。

我已经添加了

'django.contrib.staticfiles',

到我的INSTALLED_APPS并添加了

STATIC_URL = '/static/'
STATIC_ROOT = '/Users/kevdotbadger/django/mylook/static/'

到我的settings.py文件。

我的所有静态文件都位于Mac上的STATIC_ROOT文件夹中。

现在,在我使用的模板中

{{ STATIC_URL }}

正确呈现为/static/

然而

{{ STATIC_URL }}css/style.css

导致404错误。 我正在使用'runserver'命令作为服务器。

有什么我想念的吗?

我恳请你阅读这里的howto文档: http//docs.djangoproject.com/en/dev/howto/static-files/

简而言之:只有在调用collectstatic manangement命令时才使用STATIC_ROOT。 不需要将目录添加到STATICFILES_DIRS设置来提供静态文件!

在开发期间(使用自动服务视图时),静态文件将自动在各个位置查找静态文件(因为您将其“服务”视图称为静态文件的路径)。 对于此搜索,它将使用所谓的“finders”(在STATICFILES_FINDERS设置中定义)。

  1. 其中一个默认查找程序是AppDirectoriesFinder,它将查看您的每个应用程序的“/ static /”目录INSTALLED_APPS设置。

  2. 另一个默认查找器是FileSystemFinder,它将查看您在STATICFILES_DIRS设置中指定的目录。

顺便说一句,这两种搜索模式都与模板加载的工作方式类似。

运行collectstatic命令时将使用相同的技术,但它现在将从各个位置收集文件(使用与上面相同的查找器),将找到的文件放入STATIC_ROOT,准备部署。

我找到了一个快速简便的解决方法来在开发期间提供项目全局静态文件:

  • 启动一个包含项目静态文件的新应用程序(例如“manage.py startapp static_content”)
  • 在该应用程序中创建一个名为“static”的文件夹,并将静态文件放在那里。
  • 将新应用添加到已安装的应用列表中

如果您只想要一个解决方案 - 向下滚动到“解决方案”。

概观

我昨天发现了同样的问题。 这是我发现的:

你需要的只是适当的静态查找器,它会找到你的STATIC_ROOT及其所有内容,但是没有这样的查找器。 以下是默认查找器:

  • django.contrib.staticfiles.finders.AppDirectoriesFinder - 搜索已安装的django应用程序目录为'static'文件夹,但大多数目前使用过时的'media'文件夹。

  • django.contrib.staticfiles.finders.FileSystemFinder - 使用STATICFILES_DIRS中提到的所有目录,但不能将STATIC_ROOT添加到其中。

  • django.contrib.staticfiles.finders.DefaultStorageFinder - 在您的DEFAULT_FILE_STORAGE中搜索静态,默认为django.core.files.storage.FileSystemStorage ,它指向您的MEDIA_ROOT

这就是全部,没有其他选择。 目前没有选择使用STATIC_ROOT(在Django 1.3中)。
所以我刚刚为这些需求编写了自己的自定义查找程序:

  • 我的自定义静态查找程序文件: finders.py

     from django.core.files.storage import FileSystemStorage from django.contrib.staticfiles.finders import BaseStorageFinder from django.conf import settings class StaticFinder(BaseStorageFinder): storage = FileSystemStorage(settings.STATIC_ROOT, settings.STATIC_URL) 
  • settings.py

     STATICFILES_FINDERS = ( 'finders.StaticFinder', ) 
  • 如果你想将它与其他发现者一起使用 - 我建议将它们放在STATICFILES_FINDERS中

请记住 :此解决方案应仅用于开发需求,而不应用于生产!

首先,确保在urls.py中启用了静态服务 ,仅限开发。

此外,你可能还有一个额外的斜线。 如果你的STATIC_URL =='/ static /',那么

{{STATIC_URL}} / css / style.css应为{{STATIC_URL}} css / style.css。

STATIC_ROOT = '/home/ws/be/bla/'
STATICFILES_DIRS = ('/home/ws/be/static/',)
STATIC_URL = '/static/'

这适合我。 STATIC_ROOT必须与STATICFILES_DIRS(Django 1.4版pre-alpha SVN-16436)不同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM