Django - 无法加载静态CSS文件

时间:2011-09-27 19:40:02

标签: python django static-files

我在本地计算机(Mac OS X)上运行Django的开发服务器(runserver),无法加载CSS文件。

以下是settings.py中的相关条目:

STATIC_ROOT = '/Users/username/Projects/mysite/static/'

STATIC_URL = '/static/'

STATICFILES_DIRS = (
'/Users/thaymore/Projects/mysite/cal/static',
)

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

INSTALLED_APPS = (
# other apps ...
'django.contrib.staticfiles',
)

在我的views.py中,我正在请求上下文:

return render_to_response("cal/main.html",dict(entries=entries),context_instance=RequestContext(request))

在我的模板中,{{ STATIC_URL }}呈现正确:

<link type="text/css" href="{{ STATIC_URL }}css/main.css" />

变成:

<link type="text/css" href="/static/css/main.css"/>

文件实际位于何处。我还运行了collectstatic以确保收集了所有文件。

我的urls.py中还有以下几行:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns += staticfiles_urlpatterns()

我是Django的新手,所以我可能会错过一些简单的东西 - 非常感谢任何帮助。

20 个答案:

答案 0 :(得分:65)

仔细阅读: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

django.contrib.staticfiles INSTALLED_APPS中的settings.pyDEBUG=False吗?

runserver?如果是,则需要使用--insecure参数调用python manage.py runserver --insecure

collectstatic

STATIC_ROOT与通过开发服务器提供文件无关。它用于在一个位置collectstatic收集静态文件,供Web服务器查找。实际上,将STATIC_ROOT设置为STATICFILES_DIRS中的路径时运行{{1}}是一个坏主意。您应该仔细检查以确保您的CSS文件现在都存在。

答案 1 :(得分:19)

使用Django 1.11.x +,您必须在settings.py中配置静态文件,

STATIC_URL = '/static/' # the path in url

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

并将其与静态模板标记

一起使用
{% load static %}
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">

答案 2 :(得分:5)

另一个简单的尝试是停止,然后重新启动服务器,例如。

$ python manage.py runserver

我查看了其他答案,但重启服务器对我有用。

答案 3 :(得分:4)

将以下代码添加到settings.py

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

之后,在项目的根目录下创建静态文件夹。

要在模板上加载静态文件,请使用:

{% load static %}
  <img src="{% static "images/index.jpeg" %}" alt="My image"/>

答案 4 :(得分:3)

settings.py中是否遗失了这些内容?我正在粘贴我项目的一个设置:

TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages")

此外,这就是我urls.py中的内容:

urlpatterns += patterns('', (
        r'^static/(?P<path>.*)$',
        'django.views.static.serve',
        {'document_root': 'static'}
))

答案 5 :(得分:2)

这些步骤对我有用,请参阅Load Static Files (CSS, JS, & Images) in Django

我使用Django 1.10。

  1. static的同一级别创建文件夹settings.pysettings.py的路径为~/djcode/mysite/mysite/settings.py,因此此目录为~/djcode/mysite/mysite/static/;
  2. static_dirs中创建两个文件夹static_rootstatic,即~/djcode/mysite/mysite/static/static_dirs/~/djcode/mysite/mysite/static/static_root/;
  3. 像这样写settings.py

    # Static files (CSS, JavaScript, Images)
    
    # https://docs.djangoproject.com/en/1.10/howto/static-files/
    
    STATIC_URL = '/static/'
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'mysite', 'static', 'static_root')
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'mysite', 'static', 'static_dirs'),
    )
    
  4. 在shell中执行此命令$ python manage.py collectstatic;

  5. css中创建文件夹static_dirs并将其放入您自己的.css文件中,您的css文件'路径为~/djcode/mysite/mysite/static/static_dirs/css/my_style.css;

  6. 更改<link>文件中的.html代码:<link rel="stylesheet" type="text/css" href="{% static 'css/my_style.css' %}">

  7. 最后,此链接的路径为http://192.168.1.100:8023/static/css/my_style.css

    宾果!

答案 6 :(得分:2)

加入

PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, "static"), )

并从STATIC_ROOT删除settings.py,它对我有用

答案 7 :(得分:1)

DEBUG = True在我的本地设置中为我做了。

答案 8 :(得分:1)

在settings.py中添加此"django.core.context_processors.static",上下文处理器

TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.static",

答案 9 :(得分:0)

查看您的主应用程序(静态目录所在的位置)是否包含在INSTALLED_APPS中。

  

使用启用的查找程序搜索文件。默认设置是查看STATICFILES_DIRS中定义的所有位置以及INSTALLED_APPS设置指定的应用程序的“静态”目录。

答案 10 :(得分:0)

您是否已添加到模板中:

{% load staticfiles %}

这会加载所需的东西,但出于某些原因,我经历过有时没有这个的工作...... ???

答案 11 :(得分:0)

你在STATICFILES_DIRS和STATIC_ROOT中有相同的路径,我遇到了同样的问题,下面是例外 -

NotperlyConfigured:STATICFILES_DIRS设置不应包含STATIC_ROOT设置

对于本地,您不需要STATICFILES_DIRS,因为无论如何您不需要运行collectstatic。一旦你评论它,它应该工作正常。

答案 12 :(得分:0)

您可以根据是在本地主机还是在服务器上运行来设置STATIC_ROOT。要确定这一点,请参阅此post

您可以将STATIC_ROOT配置重写为:

import sys

if 'runserver' in sys.argv:
    STATIC_ROOT = ''
else:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

答案 13 :(得分:0)

如果您设置DEBUG = FALSE 您需要按照以下步骤进行操作

在您的urls.py文件中: 添加此行

pm

答案 14 :(得分:0)

我有同样的问题(ununtu 16.04服务器)。

这对我有帮助

  

python manage.py collectstatic --noinput

答案 15 :(得分:0)

在settings.py中添加以下内容

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')  
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

答案 16 :(得分:0)

在Django应用程序中运行静态文件要注意的两个最基本要点是-在g.SmoothingMode = SmoothingMode.None; 文件中声明静态文件路径

settings.py

另一个重要参数是正在使用static关键字的网页,您需要加载静态文件。

STATIC_URL = '/static/'

答案 17 :(得分:-1)

我必须使用

STATICFILES_DIRS = ( '/home/USERNAME/webapps/django/PROJECT/static/', )

这帮助了我。

答案 18 :(得分:-1)

我试过这个模型并且有效。

根据使用shell

创建的django项目的设置更改
"django-admin.py startproject xxx"# here xxx is my app name

将文件夹修改为如下结构加载我们的静态文件以在服务器上运行

xxx的结构是:

>     .
>     |-- manage.py
>     |-- templates
>     |   `-- home.html
>     `-- test_project
>         |-- __init__.py
>         |-- settings.py
>         |-- static
>         |   |-- images
>         |   |   `-- 01.jpg
>         |   |-- style.css
>         |-- urls.py
>         `-- wsgi.py

- 在Settings.py中修改

import os
INSTALLED_APPS = (    'xxx',# my app is to be load into it)

STATIC_ROOT = ''
STATIC_URL = '/static/'
PROJECT_DIR = os.path.dirname(__file__)
TEMPLATE_DIRS = (      os.path.join(PROJECT_DIR, '../templates'),)#include this 

- urls.py中的修改

from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView

class DirectTemplateView(TemplateView):
    extra_context = None
    def get_context_data(self, **kwargs):
        context = super(self.__class__, self).get_context_data(**kwargs)
        if self.extra_context is not None:
            for key, value in self.extra_context.items():
                if callable(value):
                    context[key] = value()
                else:
                    context[key] = value
        return context

urlpatterns = patterns('', 
    url(r'^$', DirectTemplateView.as_view(template_name="home.html")), )

- home.html

<html>
    <head>
        <link href="{{STATIC_URL}}style.css" rel="stylesheet" type="text/css">
    </head>
    <body>
        <h1>This is home for some_app</h1>
      <img src="{{STATIC_URL}}/images/01.jpg" width=150px;height=150px; alt="Smiley ">
    </body>
</html>

答案 19 :(得分:-1)

转到HTML页面的静态加载方式

{% load static %}

现在我唯一犯的错误就是这个

我的代码:

<img src="**{% static** "images/index.jpeg" %}" alt="My image">

已更新:

<img src=**"{% static 'images/index.jpeg' %}' alt="My image"**>

您做对了