人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

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<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>

运行截图

 

 

 

 

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

 

 

posted @ 2019-12-07 17:44  宇~  阅读(712)  评论(0编辑  收藏  举报