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

声明 :本博客用的为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\d+)/(P\d+)/(P\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"),

#页面引用解析路由写法

班级列表,点击查看

{% for grade in grade_list %}
  • {{ grade.g_name }}
  • {% endfor %}

    二、页面分割与继承:

    为什么要页面分割:当你写一个网页时,页面间比如说顶部导航栏多个页面都有,这时候就可以用继承来写,节约的重复写的繁琐工作

    #基本页面,这样写着,表示布局
    {% block header %}
        
    {% endblock %}
    
    {% block search %}
    
    {% endblock %}
    
    {% block content %}
    
    {% endblock %}
    
    {% block footer %}
    
    {% endblock %}
    
    #继承(不用写body啥的了)
    {% extends "base.html" %}
    {% block header %}
        

    原先父类的---这是一个头! header

    {% endblock %} 2. % block content %}

    继承显示 content

    {% endblock %} #两者均会显示 {% block header %} {{ block.super }}

    覆盖继承文件的 header

    {% endblock %}

    三、实例演示:数据库传参,url列表跳转

    那么问题来了,这有什么用呢,—————-其实用处大大滴(首先能做到反基本的爬取,可以做列表以及列表的详情页)———自己上代码

    #数据库传参实例
        path(r'grades/',views.grades,name='getgrade'),
        path(r'students//',views.students,name='getstudent'),
        # path(r'gettime////',views.get_time),
    
        #显示学生详情
        path(r'student_detil//',views.student_detil,name='studentdetil'),
        #删除学生
        path(r'delete_student//',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+"班学生"+"添加成功")
    
     

    班级列表,点击查看

    {% for grade in grade_list %}
  • {{ grade.g_name }}
  • {% endfor %}

    170{{ g_id }}班的学生列表如下:


    添加学生信息

    姓名: 所在班级:

    学生情况:

  • 姓名{{ student.s_name }}
  • 所在的班级:170{{ student.s_grade_id }}
  • 运行截图

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