Diango中的MTV模型
Django的MTV分别代表:
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模块):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Templates
模板语法继承
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 *{ 8 margin: 0; 9 } 10 .con{ 11 width: 100%; 12 height: 30px; 13 background-color: aqua; 14 } 15 .left,.right{ 16 float: left; 17 } 18 .left{ 19 width:20%; 20 height: 600px; 21 background-color: deeppink; 22 } 23 .right{ 24 width: 80%; 25 height: 600px; 26 } 27 </style> 28 </head> 29 <body> 30 <div class="con"></div> 31 <div class="left"></div> 32 <div class="right"> 33 {% block con %} 34 35 {% endblock %} 36 </div> 37 38 </body> 39 </html>
base.html表示的是母版,其他的模板可以继承母版,继承的语法如下:
{% extends 'base.html' %} {% block con %} <p>这是一个登陆界面</p> {% endblock %}
这里是使用继承的一些提示:
-
如果你在模版中使用
{% extends %}
标签,它必须是模版中的第一个标签。其他的任何情况下,模版继承都将无法工作。 -
在base模版中设置越多的
{% block %}
标签越好。请记住,子模版不必定义全部父模版中的blocks,所以,你可以在大多数blocks中填充合理的默认内容,然后,只定义你需要的那一个。多一点钩子总比少一点好。 -
如果你发现你自己在大量的模版中复制内容,那可能意味着你应该把内容移动到父模版中的一个
{% block %}
中。 -
If you need to get the content of the block from the parent template, the
{{ block.super }}
variable will do the trick. This is useful if you want to add to the contents of a parent block instead of completely overriding it. Data inserted using{{ block.super }}
will not be automatically escaped (see the next section), since it was already escaped, if necessary, in the parent template.
url反向解析
- 在模板中:使用url 模板标签。
- 在Python 代码中:使用django.core.urlresolvers.reverse() 函数。
- 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法。
代码展示:
1 login.html 2 3 def login(request): 4 if request.method=='POST': 5 username=request.POST.get('username') 6 pwd=request.POST.get('pwd') 7 return HttpResponse('登陆成功') 8 else: 9 return render(request,'login.html') 10 11 12 login.html 13 14 <!DOCTYPE html> 15 <html lang="en"> 16 <head> 17 <meta charset="UTF-8"> 18 <title>Title</title> 19 {# <link href="">#} 20 <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css"> 21 </head> 22 <body> 23 <form class="form-horizontal" method="post" action="{% url 'LOGIN' %}"> 24 <div style="margin: 80px 100px"> 25 <div class="form-group"> 26 <label for="t1" class="col-sm-2 control-label">用户名</label> 27 <div class="col-sm-10"> 28 <input type="text" class="form-control" id="t1" name="username"> 29 </div> 30 </div> 31 <div class="form-group"> 32 <label for="t2" class="col-sm-2 control-label">密码</label> 33 <div class="col-sm-10"> 34 <input type="password" class="form-control" id="t2" name="pwd"> 35 </div> 36 </div> 37 <div class="col-sm-offset-2 col-sm-10"> 38 <button type="submit" class="btn btn-default">登陆</button> 39 </div> 40 </div> 41 <p>爱好<div><input type="checkbox" name="hobby" value="1">篮球</div> 42 <div><input type="checkbox" name="hobby" value="2">足球</div> 43 <div><input type="checkbox" name="hobby" value="3">排球</div> 44 </p> 45 <select name="pro"> 46 <option value="111">河北省</option> 47 <option value="222">河南省</option> 48 <option value="333">湖南省</option> 49 </select> 50 </div> 51 </form> 52 </body> 53 </html> 54 55 56 57 urls.py 58 59 url(r'login/',views.login,name='LOGIN'),