Django模型、模板和视图

 创建数据驱动页面的流程

在 Django 中创建数据驱动页面主要分为 5 步:
➊ 在 views.py 文件中导入想使用的模型。
➋ 在视图函数中查询模型,获取想呈现的数据。
➌ 把从模型获取的数据传给模板上下文。
➍ 创建或修改模板,显示上下文中的数据。
➎ 把 URL 映射到视图上(如果还未做的话)。
以上就是在 Django 框架中把模型、视图和模板连接在一起的步骤。

 

在首页显示分类

客户对主页的要求之一是显示最受欢迎的 5 个分类。下面根据上述步骤实现这一要求。
导入所需的模型
首先完成第一步。打开 rango/views.py 文件,在顶部其他导入语句之后从 Rango 应用的 models.py
文件中导入 Category 模型:

# 导入 Category 模型
from rango.models import Category

修改 index 视图
下面完成第 2 步和第 3 步。我们要修改主页的视图函数,即 index() 。根据下述代码修改。

def index(request):
    # 查询数据库,获取目前存储的所有分类
    # 按点赞次数倒序排列分类
    # 获取前 5 个分类(如果分类数少于 5 个,那就获取全部)
    # 把分类列表放入 context_dict 字典
    # 稍后传给模板引擎
    category_list = Category.objects.order_by('-likes')[:5]
    context_dict = {'categories': category_list}
    # 渲染响应,发给客户端
    return render(request, 'rango/index.html', context_dict)

这里的 Category.objects.order_by('-likes')[:5] 从 Category 模型中查询最受欢迎的前 5 个分
类。 order_by() 方法的作用是排序,这里我们根据 likes 字段的值倒序排列。 -likes 中的 - 号表
示倒序(如果没有 - 号,返回的结果是升序排列的)。因为我们想获得一个分类对象列表,所以
使用 Python 的列表运算符从列表中获取前 5 个对象( [:5] ),返回一个 Category 对象子集。
查询结束后,把列表的引用( category_list 变量)传给 context_dict 字典。最后把这个字典作
为模板上下文传给 render() 函数。

修改 index 模板
更新视图之后,接下来要做第 4 步,更新项目根目录中 templates 目录里的 rango/index.html 模
板。根据下述代码片段修改模板中的 HTML。

<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<title>Rango</title>
</head>
<body>
<h1>Rango says...</h1>
<div>hey there partner!</div>
<div>
{% if categories %}
<ul>
{% for category in categories %}
<li>{
  { category.name }}</li>
{% endfor %}
</ul>
{% else %}
<strong>There are no categories present.</strong>
{% endif %}
</div>
<div>
<a href="/rango/about/">About Rango</a><br />
<img src="{% static "images/rango.jpg" %}" alt="Picture of Rango" />
</div>
</body>
</html>

这里,我们使用 Django 模板语言提供的 if 和 for 控制语句呈现数据。在页面的 <body> 元素中,
我们判断 categories (包含分类列表的上下文变量)中有没有分类( {% if categories %} ࿰

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于Django模型视图模板,我可以做个简单的介绍: Django是一个MVC框架,其中的M、V、C分别指的是模型层、视图层和控制器层(其中控制器层在Django中对应的是URLconf),而这里的MVC与传统的MVC有所不同,更倾向于MVT的架构,即模型层(Model)、视图层(View)和模板层(Template)。 - 模型(Model):模型层主要是把应用中需要用到的数据以类似面向对象的方式进行定义、管理和操作,通常对应database中的表。Django中的ORM(Object-relational mapping)对开发者屏蔽了底层的SQL操作,开发者可以直接以Python语言去操作数据库,而不需要关心底层SQL的实现细节。 - 视图(View):视图层最主要的作用是处理用户的请求,响应相应的结果给用户。一般来说,视图会从数据库、缓存等数据源中获取数据,然后将结果进行组装,返回HttpResponse给用户。Django视图可以通过函数或者类的方式来定义,对外提供一个可被URLconf调用的可调用对象。 - 模板(Template):模板视图层生成响应结果的主要组成部分,可以理解为一个动态生成的HTML页面,其中包含了数据展示、控制逻辑、页面渲染等元素。Django中的模板提供了超过100个内置的指令和过滤器,开发者可以非常方便的实现模板的渲染和页面的实现。 总结一下,模型层主要和数据打交道,视图层主要和操作和生成Http Response联系在一起,模板层主要负责页面的渲染和数据展示。希望这个介绍可以帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值