Django静态文件无法加载。

12

我有一个问题。我按照这个Django教程(编辑:链接失效,这里提供有效的链接)中描述的一切都已经做好了,一切正常运行,但是CSS和图像没有显示/应用。我该如何让CSS和图像正常显示?谢谢任何帮助。

我的CSS样式文件:

li a {
    color: red;
}
body {
    background: white url("images/background.gif") no-repeat right bottom;
}

urls.py

from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import patterns,url
from polls import views
urlpatterns = patterns('',
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
    url(r'^(?P<pk>\d+)/results/$', views.ResultsView.as_view(), name='results'),
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'), 
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

index.html

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static '/polls/style.css' %}"/>
{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
    <li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}

settings.py

MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    '/polls/static/'
    )
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

ROOT_URLCONF = 'mysite.urls'

WSGI_APPLICATION = 'mysite.wsgi.application'

TEMPLATE_DIRS = (
    'C:/django poll project/mysite/templates',
    )

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'polls',
)

运行 runserver 命令时出现:

[18/Sep/2014 17:40:51] "GET /polls/ HTTP/1.1" 200 311
[18/Sep/2014 18:25:39] "GET /polls/ HTTP/1.1" 200 311

你把CSS文件放在哪里了? - uranusjr
\django投票项目\polls\static\polls\style.css - SSR.P.S.das
将以下代码实现在您的项目中:访问此链接:https://stackoverflow.com/questions/66132733/how-run-static-file-when-debug-is-false。 - Bhautik Jivani
11个回答

16

2019 年 Django 2.2 的更新答案

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

settings.py中,已经定义了BASE_DIR

同时,在加载时,请使用{% load static %}而不是{% load staticfiles %}


1
注意:这是一个元组,请不要忘记在末尾加上逗号。 - Mujeeb Ishaque
注意:它也可以是列表,例如 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] - Mujeeb Ishaque

11

静态文件的URL为"yourDomain/static/"

当您想要访问您的"style.css"时,应使用"/static/style.css"而不是"/polls/style.css"

编辑:

更改您的settings.py中的此部分

STATICFILES_DIRS = (
    '/polls/static/'
    )
to
STATICFILES_DIRS = (
    'C:/django poll project/mysite/static'
    )
更好的做法是:
STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, '..', 'static'),
)

那么文件夹名字叫做“static”,并且在“manage.py”所在的同一级目录。当您把style.css文件放在这个“static”文件夹中时,您可以使用“/static/style.css”来调用它。


不反映任何更改 - SSR.P.S.das

5
针对Django 4版本2022年发布: 如果任何人的静态文件无法正常工作,请确保您的静态文件夹位于正确的位置。 快捷方式: 将您的static文件夹放在与您的数据库位于同一目录中。
-->ProjectName
  -->app1
  -->app2
  -->db.sqlite3
  -->static

enter image description here

"并确保您已在settings.py文件中添加了这些行"
STATIC_URL = 'static/'
STATICFILES_DIRS = (
BASE_DIR/'static',
)

我收到了一个错误信息:“STATICFILES_DIRS设置不应包含STATIC_ROOT设置。” 它就是不想加载静态文件,对于我所有的静态文件都会显示“未找到”错误。 - undefined

2

2
  1. INSTALLED_APPS 中删除 django.contrib.staticfiles
  2. STATIC_ROOT 设置为静态文件所在的驱动器文件夹。
  3. STATIC_URL 设置为浏览器文件夹/前缀,该前缀将指向这些文件。

问题在于 STATIC_ROOTSTATICFILES_DIRS 不能在同一个文件夹中并且尝试扮演不同的角色...

STATICFILES_DIRS

  • 存在是因为不同的可安装应用程序有不同的静态资源。

  • 通过 django 的魔法,在开发中,这些文件是从每个应用程序中提供的。

  • 这允许编辑资源并重新运行服务器,而无需担心 STATIC_ROOT 缓存。

  • 还需要一个收集器,将静态文件组装到 STATIC_ROOT 中。

STATIC_ROOT

  • 生产环境中提供文件的位置。
  • 一个简单的浏览器路径到文件夹映射。
  • 不建议用于生产,因为通常由 NGINX 或 AppEngine 处理此过程。
  • 之所以起作用,是因为您跳过了收集器并告诉 Django 总是在这里查找。
  • 如果应用程序有自己的资源,则无法使用,您将需要使用 STATIC_DIRS

2
如果在模板文件中存在问题变量{{STATIC_URL}},请添加以下内容:
'django.template.context_processors.static'

请转到settings.py模块的这一部分:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': TEMPLATE_DIRS,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.template.context_processors.static',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

2

它对我有效:

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

1
STATIC_URL = '/static/'
STATICFILES_DIRS = (
   os.path.join(BASE_DIR, 'static'),
)

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'images')

0

针对较新版本的Django,请使用以下命令。这解决了我的问题。

STATIC_URL = 'static/'

STATICFILES_DIRS = [ BASE_DIR / "static", '/var/www/static/', ]

{% load static %}

我按照这份文档(https://docs.djangoproject.com/en/4.1/howto/static-files/)进行操作。


0

目前适用于Django 3.x版本

{% load static %}
<!DOCTYPE html>
<html>
    <head>
        <title>Website</title>
        <link rel="stylesheet" href="{% static 'css/style.css' %}">
    </head>
    <body>
        <h1>Hello user!</h1>
        <p>something you want</p>
    </body>
</html>

为了在实现中工作,必须在项目设置文件中添加以下代码。

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

这里的 static 是项目根目录下的一个文件夹。


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