无法让Django提供静态文件

时间:2014-03-17 19:07:25

标签: python django

我知道SO上有很多类似的线程实际上是同一个问题 - 但我无法解决我的问题

Django版

>>> import django
>>> print django.get_version()
1.6.2

我想从模板访问静态文件(css,images,..)。

<link rel="stylesheet" type="text/css" href="styles.css" />

我的文件夹结构

Project
|-- Project
    |-- settings.py
    |-- ...
|-- app
    |-- views.py
    |-- ...
|-- templates
    |-- a_template.html
|-- static
    |-- styles.css

settings.py(重要部分)

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'server',
)

STATIC_URL = '/static/'

我为STATIC_URL(甚至绝对路径)尝试了很多不同的解决方案,但它们都没有为我工作。

4 个答案:

答案 0 :(得分:1)

首先,我会使用static模板标记添加到模板顶部:

{% load static %}

然后,在href中:

href="{% static "styles.css" %}"

然后,我会更改我的urls.py并添加开发服务器提供静态文件的可能性:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

/* you url patterns here */

if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns()

应该这样做......

答案 1 :(得分:1)

找到静态文件

由于您的static目录不在应用中,因此您应将os.path.join(BASE_DIR, 'static')添加到STATICFILES_DIRS。就像您可能已将os.path.join(BASE_DIR, 'templates')添加到TEMPLATE_DIRS一样。 (至少我是这么认为的,因为你没有抱怨缺少模板。

收集静态文件(开发期间不需要)

deployment期间,您应该发出

$ python manage.py collectstatic

命令,将所有静态文件复制到STATIC_ROOT

使用模板中的静态文件

要将浏览器指向正确的资源,您应该将{{ STATIC_URL }}放在您使用的文件名之前,或使用{% static %}中的how to模板标记。

答案 2 :(得分:1)

配置BASE_DIR:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

设置调试为True:

DEBUG=True

设置静态URl:

STATIC_URL = '/static/'

在ROOT变量中设置ROOT_PATH

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

设置STATICFILES变量:

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

在HTML文件中提及静态CSS文件:

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

答案 3 :(得分:0)

您想要更改模板中的href属性:

href="{{STATIC_URL}}styles.css"

此外,您可能希望通过python manage.py collectstatic收集静态文件。

此处有更多信息:https://docs.djangoproject.com/en/dev/howto/static-files/