Django没有加载CSS?

时间:2014-01-13 04:01:49

标签: 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 }),
)

我的site_media文件夹和style.css文件位于

myProjectFolder/myApp/static/site_media/css/style.css

并在我的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>

在我的style.css中,我所拥有的只是:

#header {
    display: inline;
    background-color: black;
    color: black;
    border: 1px solid green;
}

并且CSS未应用于

#header

DIV。知道为什么吗?

2 个答案:

答案 0 :(得分:4)

问题来自两个方面。

  1. 传递了错误的document_root变量
  2. 未在html中使用模板标签
  3. 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
    )
    

    将urls.py文件替换为:

    from myApp import settings
    
    urlpatterns = patterns('',
    url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
    { 'document_root': settings.SITE_MEDIA_ROOT }),
    )
    

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

    {% load static %}
    

    然后替换:

    <link rel='stylesheet' type='text/css' href='/site_media/css/style.css' />
    

    使用:

    <link rel='stylesheet' type='text/css' href="{% static 'site_media/css/style.css' %}" />
    

    之后它应该可以工作。

答案 1 :(得分:1)

两个选项:

  1. 您可以在urls.py
  2. 中修改一下您的代码 在urls.py中

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

    site_media = os.path.join(
        os.path.dirname(__file__), "../", "myApp", "static", 'site_media'
    )
    

    2。删除

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

    并添加

    {% load static %} at the beginning of base.html
    

    并更改

    <link rel='stylesheet' type='text/css' href='/site_media/css/style.css' />
    

    <link rel='stylesheet' type='text/css' href="{% static 'site_media/css/style.css' %}" />
    

    第二种方法更可取。 这是工作代码:https://github.com/lukaszszajkowski/s21083672

    以下是文档和阅读的链接: https://docs.djangoproject.com/en/dev/howto/static-files/#configuring-static-files Media files are served, static files aren't