如何在Django模板中包含外部CSS、图片等?
在Django中,所有的链接地址都是从urls.py这个文件里解析出来的。所以说,它并没有像其他框架那样的目录结构。
那如果你想在你的模板里加入一个CSS文件怎么办呢?
有没有办法不把它添加到urls.py文件里?
如果没有,那是不是每个资源都要在urls.py里新加一条记录呢?
3 个回答
在我的根目录下的urls.py文件中,我使用这种方式来在本地开发时提供静态文件。同时,我还添加了一个叫做SERVE_STATIC_MEDIA的设置,这样我就可以把它和DEBUG分开。
if settings.SERVE_STATIC_MEDIA:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve', \
{'document_root' : settings.MEDIA_ROOT}),
)
然后在模板中,你可以这样访问css、js和图片:
<link type="text/css" href="{{ MEDIA_URL }}css/foo.css" media="screen,projection" />
在使用 Django 1.10 及以上版本时,你不再需要指定 STATIC_ROOT。简单来说,确保
django.contrib.staticfiles
被包含在 INSTALLED_APPS 里。
同时,在你的 settings.py 文件中,确保有以下设置:
STATIC_URL = '/static/'
接下来,在你的应用目录下创建一个叫 "static" 的文件夹,然后在这个 "static" 文件夹里,再创建一个以你的应用名命名的子文件夹,把静态文件放到那里。如果需要的话,你还可以在这个子文件夹里根据需要创建 js、img、css 等子文件夹。
然后,在模板文件中包含正确的路径。例如:
src = "/static/my_app/example.js"
或者
src = "/static/my_app/js/example.js"
(假设你的 JavaScript 文件在一个叫 js 的文件夹里)
另外,还有一个更好的方法,就是使用静态模板标签来定义路径:
{% load static %}
<script src="{% static "my_app/js/example.js" %}"></script>
你只需要知道这些:
可以查看一下Django关于静态文件的指南。
简单来说,在你的配置文件里,你需要指定一个特别的文件夹来存放静态文件。文档里的例子是:
STATIC_ROOT = "/home/jacob/projects/mysite.com/sitestatic"
你可以把CSS文件、图片等放在这个文件夹里,服务器就会知道从这个文件夹里提供与静态网址模式匹配的内容。