聲明:本博客用的為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="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>
運行截圖
四、下期更新會話的登錄注冊,以及會話類型的基本講解,希望大家喜歡!!!