首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django -未找到静态文件

Django -未找到静态文件
EN

Stack Overflow用户
提问于 2011-05-16 08:14:19
回答 15查看 169.8K关注 0票数 112

我看过几篇关于这个问题的帖子,但没有找到解决方案。

我试图在Django 1.3开发环境中提供静态文件。

这是我的设置

代码语言:javascript
运行
复制
...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
  '/static/',
)
...

我的urls.py

代码语言:javascript
运行
复制
urlpatterns = patterns('',
...
  url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root', settings.STATIC_ROOT}
  ),
...
);

我的/home/glide/Documents/django/cbox/静态/目录如下

代码语言:javascript
运行
复制
css
  main.css
javascript
image

当我试图访问http://127.0.0.1:8000/static/css/main.css时,我得到了一个404错误。

我是否必须为css、javascript和图像分别指定模式?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2011-05-16 09:58:00

我把STATICFILES_DIRSSTATIC_ROOT搞混了

实际上,我并不真正理解STATIC_ROOT的效用。我认为这是我必须把我的普通文件放在的目录上。这个目录用于生产,这是收藏品将把(收集)静态文件的目录。

STATICFILES_DIRS是我需要的人。

因为我是在开发环境中,所以我的解决方案是不使用STATIC_ROOT (或指定另一条路径),并在中设置公共文件目录

代码语言:javascript
运行
复制
#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

票数 141
EN

Stack Overflow用户

发布于 2015-06-15 07:21:08

settings.py中可能只有两件事情会给您带来问题。

1) STATIC_URL = '/static/'

2)

代码语言:javascript
运行
复制
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

您的静态文件应该位于静态目录下,该目录与项目的设置文件位于同一个目录中。

即使这样,如果您的静态文件没有加载,那么原因是,您可能会保持

代码语言:javascript
运行
复制
DEBUG = False

将其更改为True (严格地说,只用于开发)。在生产中,只需将STATICFILES_DIRS更改为静态文件所在的任何路径。

票数 51
EN

Stack Overflow用户

发布于 2016-07-15 04:26:17

提供静态文件可以通过多种方式实现;以下是我对self的说明:

  • static/my_app/目录添加到my_app (请参阅下面关于名称空间的说明)
  • 定义一个新的顶级目录,并将其添加到STATICFILES_DIRS中的settings.py (注意,The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting)

我更喜欢第一种方式,以及接近在文档中定义方式的设置,因此为了为文件admin-custom.css提供覆盖几种管理风格的服务,我有这样的设置:

代码语言:javascript
运行
复制
.
├── my_app/
│   ├── static/
│   │   └── my_app/
│   │       └── admin-custom.css
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── static/
├── templates/
│   └── admin/
│       └── base.html
└── manage.py
代码语言:javascript
运行
复制
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

然后在模板中使用它,如下所示:

代码语言:javascript
运行
复制
# /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: installed,这将由runserver在调试设置为True ..。时自动完成。

在部署时,我运行collectstatic并使用nginx提供静态文件。

为我清除一切混乱的医生们:

STATIC_ROOT 指向收集器将收集静态文件以便部署的目录的绝对路径。 ...it是而不是,是永久存储静态文件的地方。您应该在静态文件的查找器找到的目录中这样做,在默认情况下,这些目录是“静态/”应用程序子目录以及STATICFILES_DIRS中包含的任何目录)。 https://docs.djangoproject.com/en/1.10/ref/settings/#static-root

静态文件命名空间 现在,我们可以直接将静态文件放入my_app /my_app/(而不是创建另一个子目录),但这实际上是个坏主意。Django将使用它找到的名称匹配的第一个静态文件,如果在不同的应用程序中具有相同名称的静态文件,Django将无法区分它们。我们需要能够将Django指向正确的位置,并且通过名称空间来确保这一点。也就是说,通过将这些静态文件放入另一个以应用程序本身命名的目录中。 https://docs.djangoproject.com/en/1.10/howto/static-files/

STATICFILES_DIRS 您的项目可能也有静态资产,而不是绑定到特定的应用程序。除了在应用程序中使用静态/目录之外,还可以在设置文件中定义目录列表(STATICFILES_DIRS),Django也将在其中查找静态文件。 https://docs.djangoproject.com/en/1.10/howto/static-files/

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6014663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档