我知道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
(甚至绝对路径)尝试了很多不同的解决方案,但它们都没有为我工作。
答案 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/