Django – 找不到静态文件
我已经看到这个问题的几个职位,但没有find我的解决scheme。
我试图在我的Django 1.3开发环境中提供静态文件。
这是我的设置
... STATIC_ROOT = '/home/glide/Documents/django/cbox/static/' STATIC_URL = '/static/' STATICFILES_DIRS = ( '/static/', ) ...
我的urls.py
urlpatterns = patterns('', ... url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root', settings.STATIC_ROOT} ), ... );
我的/ home / glide / Documents / django / cbox / static /目录就像
css main.css javascript image
尝试访问http://127.0.0.1:8000/static/css/main.css时遇到404错误。
我是否必须分别指定CSS,JavaScript和图像的模式?
我混淆了STATIC_ROOT和STATICFILES_DIRS
其实我并不是很了解STATIC_ROOT的效用。 我认为这是我必须把我的通用文件的目录。 此目录用于生产,这是静态文件将被放置(收集)由collectstatic目录 。
STATICFILES_DIRS是我需要的。
因为我在开发环境中,所以我的解决scheme是不使用STATIC_ROOT (或指定另一个path),并在STATICFILES_DIRS中设置我的公用文件目录:
#STATIC_ROOT = (os.path.join(SITE_ROOT, 'static_files/')) import os SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) STATICFILES_DIRS = ( os.path.join(SITE_ROOT, 'static/'), )
另外不要忘了from django.conf import settings
提供静态文件可以通过几种方式实现; 这里是我自己的笔记:
- 将一个
static/my_app/
目录添加到my_app
(请参阅下面关于命名空间的说明) - 定义一个新的顶层目录并将其添加到settings.py中
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
(注意,The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
我更喜欢第一种方式,并且接近文档中定义的方式,所以为了提供文件admin-custom.css
来覆盖一些pipe理风格,我有一个像这样的设置:
. ├── my_app/ │ ├── static/ │ │ └── my_app/ │ │ └── admin-custom.css │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── static/ ├── templates/ │ └── admin/ │ └── base.html └── manage.py
# settings.py STATIC_ROOT = os.path.join(BASE_DIR, 'static') STATIC_URL = '/static/'
然后在模板中使用,如下所示:
# /templates/admin/base.html {% extends "admin/base.html" %} {% load static %} {% block extrahead %} <link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}"> {% endblock %}
在开发过程中,如果使用django.contrib.staticfiles [ed:默认安装],当DEBUG设置为True时,这将由runserver自动完成[…]
部署时,我运行了collectstatic
并用nginx提供静态文件。
为我清除所有混乱的文件:
STATIC_ROOT
collectstatic将收集用于部署的静态文件的目录的绝对path。
…它不是永久存储您的静态文件的地方。 你应该在静态文件寻找程序find的目录中执行这些操作,默认情况下这些目录是“静态/”应用程序子目录以及包含在STATICFILES_DIRS中的任何目录)。
https://docs.djangoproject.com/en/1.10/ref/settings/#static-root
静态文件命名空间
现在我们可以把我们的静态文件直接放在my_app / static /中(而不是创build另一个my_app子目录),但实际上这是一个坏主意。 Django将使用它find的名称匹配的第一个静态文件,如果在不同的应用程序中有一个同名的静态文件,Django将无法区分它们。 我们需要能够将Django指向正确的位置,最简单的方法是通过对其进行命名来确保这一点。 也就是说,通过将这些静态文件放在为应用程序本身命名的另一个目录中。
STATICFILES_DIRS
您的项目可能还会有不受限于特定应用程序的静态资产。 除了在应用程序中使用静态/目录之外,您还可以在设置文件中定义一个目录列表(STATICFILES_DIRS),其中Django也将查找静态文件。
settings.py文件中只有两个东西可以让你的静态文件提供服务。
1)STATIC_URL ='/ static /'
2)STATICFILES_DIRS =(os.path.join(BASE_DIR,“static”),)
而你的静态文件应该位于与项目设置文件相同的目录下的静态目录下。
即使如果你的静态文件没有加载,那么原因是,你可能已经保存了
DEBUG = False
将其更改为True(仅限于开发)。 在生产中,只需将STATICFILES_DIRS更改为静态文件所在的path即可。
{'document_root', settings.STATIC_ROOT}
需要是{'document_root': settings.STATIC_ROOT}
或者你会得到一个像dictionary update sequence element #0 has length 6; 2 is required
dictionary update sequence element #0 has length 6; 2 is required
另一个错误可能不是让你的应用列在INSTALLED_APPS
列表中,如:
INSTALLED_APPS = [ # ... 'your_app', ]
没有它,你可能会面临像不检测你的静态文件,基本上涉及到你的应用程序的所有文件的问题。 即使它可以正确的build议正确答案使用:
STATICFILES_DIRS = (adding/path/of/your/app)
可能是其中一个错误,如果得到这个错误应该被审查。