美文网首页
Django学习之旅(三)

Django学习之旅(三)

作者: 猴哥爱读书 | 来源:发表于2017-09-16 21:22 被阅读0次
图片来自 unsplash

上篇文章讲到视图部分知识,本文将对视图的用法进行深入学习。

自定义视图

随着我们的Web站点页面越来越多,页面链接会越来越杂乱无章。因此有必要在项目一开始就对其进行管理。
1) 实现/articles/123的效果
urls.py文件可以这么写:

url(r'^articles/(\d+)/$',  views.articles, name='articles')

views.py实现了articles方法

def articles(request, id):
    return HttpResponse("articles'id = "+str(id))

这其中url()函数具有四个参数, regex和view是必填选项,kwargs和name是非必填选项
regex: 正则表达式的缩写。Djaogo从第一个正则表达式开始,依次对请求url进行匹配,直到找到匹配到那个为止。
view: 目标视图,即views.py文件中的函数。
kwargs: 任何关键字参数都可以以字典形式传递给目标视图。
name: 命名你的URL, 相当于给url取个别名。 这样就可以在Django的其它地方尤其是模板中,通过名称来明确地引用这个URL。 这个强大的特性可以使你仅仅修改一个文件就可以改变全局的URL模式。

模版

学到这里,你会许会有个疑问。web页面应该含有html代码的,为什么我没有看到html页面呢?我的web页面不能单单只是一句话,应该有导航栏,内容栏,底部栏吧。要满足这需求,则需要用到渲染模板的方法来显示内容。
为了方便理解,引用以上篇文章的例子
test目录下新建一个 templates 文件夹, 里面新建一个base.html 和 home.html
新建base.html目的是为了代码复用。把一些通用的部分,例如导航,底部,访问统计代码等抽取出来封装成一个页面:nav.html、 bottom.html、 tongji.html。

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}默认标题{% endblock %}</title>
</head>
<body>
 
{% include 'nav.html' %}
 
{% block content %}
<div>这里是默认内容,所有继承自这个模板的,如果不覆盖就显示这里的默认内容。</div>
{% endblock %}
 
{% include 'bottom.html' %}
 
{% include 'tongji.html' %}
 
</body>
</html>

我们的首页 home.html,继承或者说扩展(extends)原来的 base.html,可以简单这样写,重写部分代码(默认值的那一部分不用改)。代码如下:

{% extends 'base.html' %}
 
{% block title %}欢迎光临首页{% endblock %}
 
{% block content %}
{% include 'ad.html' %}
这里是首页,欢迎光临
{% endblock %}

url.py文件增加相对应的url函数就行,而views.py文件就需要改动了。
使用render()函数载入一个模板进行渲染。
该函数有三个参数,将请求对象作为它的第一个参数,模板的名字作为它的第二个参数,一个字典作为它可选的第三个参数。 它返回一个HttpResponse对象,含有用给定的context 渲染后的模板。

from django.shortcuts import render
 
def home(request):
    return render(request, 'home.html')

模板进阶

view.py属于View层,是用于显示界面。但是在实际应用中,往往view的数据不是写死的,是由模型层传输过来的。怎么将model层传输过来数据显示在视图上呢?Django模板算是利器,它具有循环、条件判断、常用的标签、过滤器等功能,这能消除我们的刚才的烦恼。
首先,我们应该知道两个知识点。分别是:
1)标签的写法: 使用{% 标签 %}, 例如

{% for item in List %}
    {{ item }}{% if not forloop.last %},{% endif %}
{% endfor %}

2)变量的写法: 使用{{ 变量 }}, 例如

{{ request.path }}  // 获取当前网址
变量 描述
forloop.counter 索引从 1 开始算
forloop.counter0 索引从 0 开始算
forloop.revcounter 索引从最大长度到 1
forloop.revcounter0 索引从最大长度到 0
forloop.first 当遍历的元素为第一项时为真
forloop.last 当遍历的元素为最后一项时为真
forloop.parentloop 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop

补充知识
1)在for循环中还有很多有用的东西,如下:

变量 描述
forloop.counter 索引从 1 开始算
forloop.counter0 索引从 0 开始算
forloop.revcounter 索引从最大长度到 1
forloop.revcounter0 索引从最大长度到 0
forloop.first 当遍历的元素为第一项时为真
forloop.last 当遍历的元素为最后一项时为真
forloop.parentloop 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop

2)如果想表示空值,代码如下

{% empty %}  // 表示为空

系列文章:
Django学习之旅(一)
Django学习之旅(二)
Django学习之旅(四)
Django学习之旅(五)
Django学习之旅(六)
推荐阅读:
爬虫系列的总结


相关文章

  • Django学习之旅(三)

    上篇文章讲到视图部分知识,本文将对视图的用法进行深入学习。 自定义视图 随着我们的Web站点页面越来越多,页面链接...

  • Django学习之旅(四)

    因为自己看了其他方面的书,所以Django的学习计划暂时搁浅。我这周重新恢复计划,Django学习之旅第四篇文章姗...

  • Django学习之旅(二)

    上一篇文章算是砍柴之前的磨刀,而本篇文章才算是开始真正的砍柴。本文具体知识点包括项目新建、目录解析、以及Djang...

  • Django学习之旅(五)

    按照上篇文章的计划,本文应当讲解文件上传功能的用法。但在学习文件上传之前,我们有必要学习下表单。因为文件上传经常以...

  • Django学习之旅(六)

    本文是 Django 学习之旅的完结篇,主要是讲述 model 层。model 层是与数据库打交道的,其中包括 怎...

  • Django学习之旅(一)

    大家还在坚持自己新年指定的计划吗?我按部就班地继续自己的计划。我近来准备学习python web方面的知识,主要是...

  • Django学习笔记1:创建项目与应用

    我们已经在上一篇笔记中成功的安装和配置了Django的学习环境。从本篇笔记开始,我们将正式开始Django之旅,汪...

  • Django学习(三)

    欢迎关注我的公众号:zx94_11 创建对象 user = User.objects.get(username='...

  • Django学习(第一天:环境的搭建)

    开始跟着美女姐姐学web开发啦!享受这10天的学习之旅吧。python web开发框架很多,Django是其中之一...

  • Django基础

    Django介绍: Django简介: 为什么使用Django? 知识储备: 学习目标: DJango初体验: 1...

网友评论

      本文标题:Django学习之旅(三)

      本文链接:https://www.haomeiwen.com/subject/lzpusxtx.html