Django2.2 Templates 页面渲染 数据列表跳转 以及简单的页面模块继承
声明:本博客用的为pycharm Django2.2,基于此内容,会简单讲解
- 数据库传参形式的增删查改(完整小项目)
- 路由的 位置参数、关键字参数、以及html中反向解析路由
- request的表单传递
- html页面分割与继承
一、路由的三种传参方式、以及路由的反向解析
1.1位置参数:
- re_path(r'gettime/(\d+)/(\d+)/(\d+)/',views.get_time),
- def get_time(request,hour,minute,second):
#普通传参
# return HttpResponse("Time--> %d:%d:%d" %(hour,minute,second))- #正则表达式传参
return HttpResponse("Time--> %s:%s:%s" % (hour, minute, second))
所谓位置参数:即函数传参时参数的书写位置不能随意改变,改变就会参数对应错误
1.2关键字参数:
- #关键字传参 年月日(在url指定顺序,函数接受无需排序----P(大写)---》参数的简写)
- re_path(r'getdata/(P<year>\d+)/(P<month>\d+)/(P<day>\d+)/',views.get_data)
- def get_data(request,day,month,year):
- return HttpResponse("无序传参 Data %s :%s :%s" %(year,month,day))
关键字参数我们可以看出,参数位置有路由决定,书写接收参数时不影响输出结果
1.3路由的反向解析(以后推荐写法)
- #跟路由写法(incude里加上namespace属性)
- path(r'App2/',include(('App2.urls','App2'),namespace='second')),
- #子路由写法(路由后面加上name属性)
- #html中反向解析路由
- path(r'learn/',views.learn,name="learn"),
- #页面引用解析路由写法
- <h3>班级列表,点击查看</h3>
- {% for grade in grade_list %}
- <li><a href="{% url 'second:getstudent' g_id=grade.id %}">{{ grade.g_name }}</a></li>
- {% endfor %}
- <a href=""></a>
二、页面分割与继承:
为什么要页面分割:当你写一个网页时,页面间比如说顶部导航栏多个页面都有,这时候就可以用继承来写,节约的重复写的繁琐工作
- #基本页面,这样写着,表示布局
{% block header %}- {% endblock %}
- {% block search %}
- {% endblock %}
- {% block content %}
- {% endblock %}
- {% block footer %}
- {% endblock %}
- #继承(不用写body啥的了)
- {% extends "base.html" %}
{% block header %}
<h1>原先父类的---这是一个头! header</h1>
{% endblock %}- 2.
- % block content %}
<h1>继承显示 content</h1>
{% endblock %}
#两者均会显示
{% block header %}
{{ block.super }}
<h1>覆盖继承文件的 header</h1>
{% endblock %}
三、实例演示:数据库传参,url列表跳转
那么问题来了,这有什么用呢,----------------其实用处大大滴(首先能做到反基本的爬取,可以做列表以及列表的详情页)---------自己上代码
- #数据库传参实例
- path(r'grades/',views.grades,name='getgrade'),
- path(r'students/<int:g_id>/',views.students,name='getstudent'),
- # path(r'gettime/<int:hour>/<int:minute>/<int:second>/',views.get_time),
- #显示学生详情
- path(r'student_detil/<int:id>/',views.student_detil,name='studentdetil'),
- #删除学生
- path(r'delete_student/<int:s_id>/',views.delete_student,name='deletestudemt'),
- #显示学生详情
- def student_detil(request,id):
- student=Student.objects.get(pk=id)
- # name=student.s_name
- # grade=student.s_grade_id
- # stu_id=Student.objects.filter(s_grade_id=s_grade_id)
- return render(request,'student_delit.html',context={"student":student,})
- #删除学生
- def delete_student(request,s_id):
- student=Student.objects.get(pk=s_id)
- student.delete()
- return HttpResponse("学生"+student.s_name+"删除成功!")
- def do_create_student(request):
- print(request.method)
- sName=request.POST.get('sName')
- grade_id=request.POST.get('choose')
- print(grade_id)
- student=Student()
- student.s_name=sName
- student.s_grade_id=grade_id
- student.save()
- return HttpResponse(sName+"--->170"+grade_id+"班学生"+"添加成功")
- <h3>班级列表,点击查看</h3>
- {% for grade in grade_list %}
- <li><a href="{% url 'second:getstudent' g_id=grade.id %}">{{ grade.g_name }}</a></li>
- {% endfor %}
- <a href=""></a>
- <h3>170{{ g_id }}班的学生列表如下:</h3>
- <ul>
- {% for student in students_list %}
- <li><a href="{% url 'second:studentdetil' id=student.pk %}">{{ student.s_name }}</a></li>
- {% endfor %}
- </ul>
- <hr>
- <h2>添加学生信息</h2>
- <form action="{% url 'second:do_create_student' %}" method="post">
- 姓名:<input type="text" name="sName">
- 所在班级:
- <select name="choose">
- <option value="">1701班</option>
- <option value="">1702班</option>
- <option value="">1703班</option>
- <option value="">1704班</option>
- <option value="">1705班</option>
- <option value="">1706班</option>
- </select>
- <input type="submit" value="确定添加该学生">
- </form>
- <hr>
- <button><a href="{% url 'second:getgrade' %}">返回班级列表</a></button>
- <h1>学生情况:</h1>
- <li>姓名{{ student.s_name }}</li>
- <li>所在的班级:170{{ student.s_grade_id }}</li>
- <button><a href="{% url 'second:deletestudemt' s_id=student.pk %}">删除该学生</a></button>
运行截图
四、下期更新会话的登录注册,以及会话类型的基本讲解,希望大家喜欢!!!
Django2.2 Templates 页面渲染 数据列表跳转 以及简单的页面模块继承的更多相关文章
- JS解析Json 数据并跳转到一个新页面,取消A 标签跳转
JS解析Json 数据并跳转到一个新页面,代码如下 $.getJSON("http://api.cn.abb.com/common/api/staff/employee/" + o ...
- 解决TabActivity中子页面不通过导航跳转到还有一个页面的问题
问题:当你的导航在TabActivity中 而子页面的一个button须要切换到当中的某一个导航页面 转载请注明出处:http://blog.csdn.net/x605940745 demo下载地址: ...
- Vue+elementUI 自定义动态数据菜单导航组件实现展开收缩+路由跳转router-view渲染数据 路由跳转到同一个页面带参数ID 自动刷新数据
准备:导入ElementUI 看官网教程 数据准备:JSON数据转换成树状 参考文章: JS实现 JSON扁平数据转换树状数据 后台我拿的数据是这样的格式: [ {id:1 , parentId: 0 ...
- 页面设计-数据列表 DataGrid
传统软件项目开发时,针对每个业务单据页面需要每控件一个一个的来设计,同时需要在页面功能中对每个控件的属性进行判定处理,尤其是页面风格布局样式需要花去一大半的时间,并且后续要想修改是非常麻烦繁琐,这样就 ...
- html(对php也有效)页面自动刷新和跳转(简单版本)
<html> <head><title>html页面自动刷新和跳转</title><meta http-equiv="Refres ...
- robotframework:appium切换webview后,在第一个页面操作成功,跳转到第二个页面后,执行命令失败
问题: 在用robot写手机淘宝app的自动化时,打开手机淘宝后,点击天猫国际,跳转到天猫国际页面,天猫国际页面是H5, 需要切换到对应的webview,切换到webview后,点击美妆菜单,跳转到美 ...
- jQuery跳转到另一个页面以及原生js跳转到另一个页面
1.原生js我们可以利用http的重定向来跳转 window.location.replace("https://www.cnblogs.com/pythonywy/"); 2.原 ...
- .net MVC中使用angularJs刷新页面数据列表
使用angularjs的双向绑定功能,定时刷新页面上数据列表(不是刷新网页,通过ajax请求只刷新数据列表部分页面),实例如下: @{ Layout = null; } <!DOCTYPE ht ...
- vue再页面渲染json数据时没有显示
对象点属性不能获取数据. 原因: 在创建数据对象时我使用了k,v方式:tempMap['category '] = this.category[i].label 如果在创建数据时使用的k,v方式,那么 ...
随机推荐
- 暑期集训20190726 跳动(skip)
[题目描述] 福州三中的操场上有着数不尽的跳动的小朋友. 当然善于思考的你总能从中发掘出不一样的问题 福州三中的跑道是一个n个格子围成的圆形,从0~n-1编号,有m个同学,第i个同学步长为a[i], ...
- [考试反思]0719NOIP模拟测试6 + 0722NOIP模拟测试7
连续爆炸,颇为愉快. 第6次:Rank #4 第7次:Rank #9 对于第6次考试,个人比较满意,因为T1只是差了一个卡常. 因为在考试前两天刚讲了矩阵,满脑子都是矩阵,还想到了循环矩阵优化. 整个 ...
- 通俗易懂了解Vue的计算属性
1.前言 之前在学习vue的过程中,一直没有搞明白计算属性是个怎么回事,以及为什么要有计算属性,使用计算属性有什么好处.今天花时间翻了翻官方文档,才搞清楚其中一二,现将学习心得总结记录如下. 2.为什 ...
- Python脚本之——API自动化框架总结
学完了Python脚本接口自动化之后,一直没有对该框架做总结,今天终于试着来做一份总结了. 框架结构如下图: 来说一下每个目录的作用: Configs:该目录下存放的是.conf,.ini文件格式的配 ...
- go语言教程之浅谈数组和切片的异同
Hello ,各位小伙伴大家好,我是小栈君,上次分享我们讲到了Go语言关于项目工程结构的管理,本期的分享我们来讲解一下关于go语言的数组和切片的概念.用法和区别. 在go语言的程序开发过程中,我们避免 ...
- Python 定义动态变量
问题描述 在做数据处理时,对一些分组得来的数据,所做的操作大同小异,变量的命名也都拥有相同的结构,比如对每个月份的数据求均值.方差等统计量,变量的命名可取为“n月的均值”,“n月的方差”,抽象出来就是 ...
- mysql批量更新写法
mysql批量更新写法<pre> $namedmp=filter($_POST['namedmp']); $namedsp=filter($_POST['namedsp']); $name ...
- css3关于body的默认滑动机制
css关于body的默认滑动机制 大家都知道 body里面只要高度超出了原来的高度就可以滚动要取消这个机制 只能设置height:100% overflow:hidden就能取消了
- egret开发方法(最笨的方法)
egret开发方法(最笨的方法)1 1个精灵1个对象名字 获取精灵设置属性也是直接获取对象设置属性 (不用想的少些代码 因为没有jquery好用) ps:如果要设置很多个精灵属性 那可以添加到数组 然 ...
- 开启docker中的mongodb认证授权
前言: 开启MongoDB服务后,默认是没有权限验证的.直接通过IP加端口就可以远程访问数据库,并对数据库进行任意操作.下面介绍一下如何开启docker中MongoDB的权限认证. 安装完MongoD ...