欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承

程序员文章站 2022-07-14 22:40:19
...

【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承

备注:
1.自学Django中,打算将学习步骤记录下来,一来是个总结,二来方便以后查询。
2.本篇主要记录了完成Django的初始相关配置后,建立视图和模板以及配置路径

本篇是在上一篇【自学笔记/Django/1】Django新建与初始配置的基础上继续做的。

下面是在此之后的基本步骤:

  • 建立模型models;
  • 配置urls;
  • 写视图views;
  • 写模板html;

建立模型models
模型目前我自己基本已经设计好了,但是还没有跟view衔接上,所以暂时先不记录。等到后面写view的逻辑时再更新模型部分,不过不影响介绍urls,views,html之间的关系。

urls,views,html之间的关系
urls,views,html之间的调用关系如下图:
【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承
代码展示如下:
【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承
配置url
可以先启动服务器:python manage.py runserver ip,默认端口号是8000,所以ip可以省略,直接输入python manage.py runserver即可,用别的端口号比如8002的话就是python manage.py runserver 8002。

进入kbApp—urls.py:

from django.conf.urls import url
from . import views

urlpatterns=[
    url(r'^Class/$', views.Class, name='Class'),
    url(r'^Individual/$', views.Individual, name='Individual'),
]

写视图views.py
由于调用views.Class,所以切换到视图views.py里。视图是用来接收并响应web的请求的。本质就是一个python函数。

from django.shortcuts import render
from django.http import HttpResponse
from .models import ClassBaseInfo   #ClassBaseInfo是model里其中一项模型类,不过目前暂时用不上,暂且先不管

# Create your views here.

def Class(request):
    #这里用来写需要在web上展示的内容

    return render(request, 'kbApp/Class.html', {"Title": "Class"})

写模板Class.html
这里我用到了模板的继承,所以先讲一下模板的继承。
以下面的页面为例:
【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承
可以看到First.html和Second.html的基本轮廓相似,就是中间虚线框内的部分不同,如果每写一个页面都写相应的css和js文件,无疑代码量比较大。因此我们可以先建立一个Base.html父模板,把中间虚线框的内容留出来,然后让First.html和Second.html子模板继承这个Base.html父模板,然后再各自填充虚线框里的内容。继承的代码如下:

  • 父模板里预留区域:

     {% block  标签名 %}
     		{# 父模板预留区域,这里什么都不用写 #}
     {% endblock  标签名%}
    
  • 子模板里填充预留的区域:

     {% block  标签名 %}
     		{# 子模板填充区域,将需要补充的写在这里 #}
     {% endblock  标签名 %}
    

【示例】
这是父模板Base.html的内容:

{% load static from staticfiles %}  {#加载静态文件#}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{Title}}</title>

    <link rel="stylesheet" type="text/css" href="{% static 'Base/css/Base.css' %}">
    <script type="text/javascript" charset="UTF-8" src="{% static 'Base/js/Base.js' %}"></script>

    {% block linkscript %}
        {# 父模板预留区域1,这里什么都不用写 #}

    {% endblock linkscript %}
</head>
<body>
    <header></header>

<div>
    {% block base %}
        {# 父模板预留区域2,这里什么都不用写 #}

    {% endblock base %}
</div>

</body>
</html>

子模板Class.html删除原来html内的所有内容,在开头继承一下父模板,然后填充预留的区域:

{% extends 'kbApp/Base.html' %}    {# 继承Base.html的内容 #}
{% load static from staticfiles %}

{% block linkscript %}
    {# 子模板填充区域1,将需要补充的写在这里,如:#}
    <link  rel="stylesheet" type="text/css" href="{% static 'Class/css/Class.css' %}"/>
    <script type="text/javascript" charset="UTF-8" src="{% static 'Class/js/Class.js' %}"></script>
{% endblock linkscript %}

{% block base %}
    {# 子模板填充区域2,将需要补充的写在这里,如: #}
    <h1>This is "Class"</h1>
{% endblock base %}

如果不打算用模板继承的话,就不用管了。

在Base.html的title里设置了Class.html的title为"Class",从上面的调用关系中看下参数"Title"的传递过程:
【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承
按照urlpatterns里的路径打开浏览器,在地址栏输入http://127.0.0.1:8000/Class/,可以看到浏览器显示:
【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承
这里只展示了一个名为Class视图、模板和它的路径配置过程,并在static文件夹里建立齐css、js、image文件夹。可以根据自己的需要建立若干模板、视图和url路径,基本的调用关系就是上面的图。