经过前面4篇的努力,已经基本完成了,polls站点的功能,但是所有界面都没有涉及样式,和JavaScript的导入.到目前为止了解到的Django是通过解析Url来完成对客户端的响应的,那么组成站点所必须的css,script,image这些不需要服务器编译的静态资源是如何加载的
1.新建静态资源文件夹及文件
类似app模板,新建路径及文件polls/static/polls/site.css,App目录结构如下:
编辑site.css如下:
body
{
background:red;
color:white;
}
2.模板引入css样式
在polls/templates/polls/index.html引入css,代码如下:
{% load static %} <link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />
查看html在浏览器的源码,可以知道 load static 引入的是相对路径/static/,这个配置是在项目包名目录下settins.py里面:
我们把静态资源放在App下就是因为这种引入方式,决定了静态资源的实际路径,明白了这个之后,我们把静态资源移动到项目根目录下,使用最原始html的方式引入:
<link rel="stylesheet" type="text/css" href="/static/polls/site.css"/>
好了刷新下界面还是生效的,注意:本例中生成浏览器中的文件地址是:
http://localhost:8000/static/polls/site.css
而不是我们理解的因为在polls App下,
http://localhost:8000/polls/static/polls/site.css
这个是因为Django查找static files的方法是在不同的应用程序中去匹配,如果有多个应用程序有重名的文件,Django是分不清楚的,它干脆返回第一个匹配到的(这个跟View中有重名函数的情况刚好相反,函数重名是返回最后一个匹配到的,比如下面的代码),所以我们在建css文件的时候,特意在static下面建了polls的二级文件夹加以区分!
def vote(request, question_id):
return HttpResponse("The First!")
def vote(request,question_id):
return HttpResponse("The Second!")
由于是初学者,还有个问题是:站点经常把静态的资源放在站点根目录下,所有App共享,这个问题以后再探讨吧???