Django没有加载CSS?

use*_*875 3 html css django django-templates django-staticfiles

这是我的urls.py

import os.path
site_media = os.path.join(
    os.path.dirname(__file__), 'site_media'
)

urlpatterns = patterns('',
    url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
    { 'document_root': site_media }),
)
Run Code Online (Sandbox Code Playgroud)

我的site_media文件夹和style.css文件在

myProjectFolder/myApp/static/site_media/css/style.css
Run Code Online (Sandbox Code Playgroud)

在我的base.html模板中(我所有其他模板都从该base.html模板扩展而来),这就是我所拥有的:

<head>
<title>{% block title %}{% endblock %}</title>
<link rel='stylesheet' type='text/css' href='/site_media/css/style.css' />
</head>

<body>
    {% block header %}{% endblock %}

    {% block content %}
        <div id='header'></div>
    {% endblock %}
</body>
Run Code Online (Sandbox Code Playgroud)

在我的style.css中,我只有这样:

#header {
    display: inline;
    background-color: black;
    color: black;
    border: 1px solid green;
}
Run Code Online (Sandbox Code Playgroud)

并且CSS没有被应用到

#header
Run Code Online (Sandbox Code Playgroud)

div。知道为什么吗?

hgu*_*hen 5

问题来自2个方面。

  1. 传递了错误的document_root变量
  2. 不使用html中的模板标签

1.不建议在urls.py文件中定义site_media变量,因为它不符合DRY原理。应将其作为变量保存在settings.py文件中,以便在需要时可以导入其他模块。在您的settings.py文件中,添加以下行:

import os.path
SITE_MEDIA_ROOT = os.path.join(
    os.path.dirname(__file__), 'myApp/', 'static/', 'site_media' #this should be the correct path instead
)
Run Code Online (Sandbox Code Playgroud)

替换为urls.py文件:

from myApp import settings

urlpatterns = patterns('',
url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{ 'document_root': settings.SITE_MEDIA_ROOT }),
)
Run Code Online (Sandbox Code Playgroud)

2.您应该使用django模板标签来获取css文件。在基本模板中,将以下行添加到head标签上方:

{% load static %}
Run Code Online (Sandbox Code Playgroud)

然后替换:

<link rel='stylesheet' type='text/css' href='/site_media/css/style.css' />
Run Code Online (Sandbox Code Playgroud)

与:

<link rel='stylesheet' type='text/css' href="{% static 'site_media/css/style.css' %}" />
Run Code Online (Sandbox Code Playgroud)

之后它应该工作。