如何在Django模板中包含外部CSS、图片等?

9 投票
3 回答
22617 浏览
提问于 2025-04-16 23:37

在Django中,所有的链接地址都是从urls.py这个文件里解析出来的。所以说,它并没有像其他框架那样的目录结构。

那如果你想在你的模板里加入一个CSS文件怎么办呢?

有没有办法不把它添加到urls.py文件里?

如果没有,那是不是每个资源都要在urls.py里新加一条记录呢?

3 个回答

2

在我的根目录下的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" />
6

在使用 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>

你只需要知道这些:

https://docs.djangoproject.com/en/1.10/howto/static-files/

9

可以查看一下Django关于静态文件的指南

简单来说,在你的配置文件里,你需要指定一个特别的文件夹来存放静态文件。文档里的例子是:

STATIC_ROOT = "/home/jacob/projects/mysite.com/sitestatic"

你可以把CSS文件、图片等放在这个文件夹里,服务器就会知道从这个文件夹里提供与静态网址模式匹配的内容。

撰写回答