44

Django2.2 Templates 页面渲染 数据列表跳转 以及简单的页面模块继承

 5 years ago
source link: http://www.cnblogs.com/cybg/p/12002518.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

声明 :本博客用的为pycharm Django2.2,基于此内容,会简单讲解

  1. 数据库传参形式的增删查改(完整小项目)
  2. 路由的 位置参数、关键字参数、以及html中反向解析路由
  3. request的表单传递
  4. 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="1">1701班</option>
            <option value="2">1702班</option>
            <option value="3">1703班</option>
            <option value="4">1704班</option>
            <option value="5">1705班</option>
            <option value="6">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>

运行截图

ymYJnef.png!webEFvQFbb.png!webzeia6vJ.png!web

四、 下期更新会话的登录注册,以及会话类型的基本讲解,希望大家喜欢!!!


Recommend

  • 60
    • 掘金 juejin.im 6 years ago
    • Cache

    React如何渲染大数据量的列表?

    我们经常会遇到这种需求,根据数据展示列表。这种代码估计你已经撸过成百上千次了。 但如果你需要同时展示成千上万条数据呢,必然会造成浏览器卡顿,丢帧,甚至卡死的问题。 本文将介绍利用react-virtualized来高效渲染大数据量列表。 开始吧! 首先创建一个

  • 58
    • 掘金 juejin.im 6 years ago
    • Cache

    Vue页面跳转动画效果实现

    前言 现如今移动端APP对用户体验方面的要求越来越高了,最近致力于用户体验优化,因为需要实现类似APP页面切换的动画效果,百度google搜索资料不是很全,所以自己写文档,在实现效果的基础上,顺便恶补一波VueRouter及CSS过渡动画的知识点,欢迎有兴趣的

  • 54
    • www.ui.cn 6 years ago
    • Cache

    如何减少页面跳转

    我们在进行设计的时候,往往遇到以下的场景: 这就是信息的无限性和手机屏幕的有限性之间的矛盾,如何把信息合理的展示给用户,需要我...

  • 60

    常见的页面跳转方式有直接跳转、左右跳转、上下跳转等,再设计时需要考虑好其中的关联性,给出最符合用户心理预期的过渡方式,从而做出最合适的设计。 页面跳转在APP中属于最常见,也是最基础的一个交互细节点。 我们常见的跳转方式:直接跳转、左右跳转、上下跳转...

  • 57
    • www.tuicool.com 5 years ago
    • Cache

    Flutter-页面跳转传参

    路由(Route)在移动开发中通常指页面(Page),这跟web开发中单页应用的Route概念意义是相同的,Route在Android中通常指一个Activity,在iOS中指一个ViewController。所谓路由管理,就是管理页面之间如何跳转,通常也可被称为导航管理。Flut...

  • 9

    Vue同一路由跳转页面不刷新解决方案及注意事项之二如果您发现本文排版有问题,可以先点击下面...

  • 18

    最近公司项目快结项了,但是我发现公司的每个页面打开都比较卡,究其原因数据量大,请求多,渲染慢。加之面试的时候也遇到过此类问题,那么今天就来尝试去实现一下。 一、整理思路 首先我们要知道js处理大量数据并没有花费多长时间。耗时最长...

  • 4

    react router页面跳转二次确认弹框及样式、业务逻辑自定义如果您发现本文排版有问题,可以...

  • 7

    vue列表数据删除后的主动刷新页面及刷新方法 问题描述: 前端删除一条数据或者新增数据后,后端操作成功,但前端不会自动刷新,需要重新刷新当前页面 (用vue-router重新路由到当前页面,页面是不进行刷新...

  • 1

    EasyCVR设备管理列表页面,分页数据不显示的问题修复 原创 TSINGSEE 2022-0...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK