39

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

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

声明 :本博客用的为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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK