Python Web学习记录之Django(四) -- 对代码的分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35737303/article/details/80437419

在上一篇文章中,我们利用实现了模板继承,到这一步,我们先对现有代码进行分析。


1. 控制台输出

启动项目后,查看控制台的输出
这里写图片描述
首先加载了setting文件,还记得我们在使用模板的时候指定了模板文件的路径:

'DIRS': [BASE_DIR+"/templates"]

我们将BASE_DIR输出,得到:
这里写图片描述
BASE_DIR为D:\workspace\workspaceDjango\Helloword,在加上/templates字符串就得到我们静态文件的保存目录。至于这里为什么输出了两次,应该是因为我们使用了继承机制,每加载一次静态文件,如HTML,系统就会调用一次setting。

2. urls.py

打开urls.py文件,文件顶部有对该文件的说明(下面是我简单翻译为成中文后的注释):

"""Helloword URL Configuration

`urlpatterns` 列出视图的路由. 查看下面网址可得到更多信息:
    https://docs.djangoproject.com/en/2.0/topics/http/urls/
举例:
Function views
    1. 添加一个导入文件:  from my_app import views
    2. 添加一个url到urlpatterns:  path('', views.home, name='home')
Class-based views
    1. 添加一个导入文件:  from other_app.views import Home
    2. 添加一个url到urlpatterns:  path('', Home.as_view(), name='home')
包含其他url配置
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""

查看D:\Python36\Lib\site-packages\django\conf\urls__init__.py文件中的url方法:
这里写图片描述
根据我们的代码:

urlpatterns = [
    url(r'^hello$', view.hello),
]

url是一个正则表达式,我们的项目在本地启动端口(默认)为8000,因此正则过后项目的访问地址为:http://127.0.0.1:8000/hello
然后指定访问的视图为view.hello,即找到view.py:

def hello(request):
    context = {}
    context['hello'] = 'Hello World!'
    return render(request, 'hello.html', context)

代码中指定了字典context,并指定其键为’hello’的值为’Hello World!’,返回一个render,查看render方法,在…\site-packages\django\shortcuts.py中:
这里写图片描述
它返回一个内容为django.template.loader.render_to_string() 的返回值的HttpResponse。
针对我们的代码解释:
也就是说,调用了这个render方法就表示向hello.html发起请求,并将context参数带入。
现在我们就查看hello.html.

3. hello.html

{% extends "base.html" %}

{% block mainbody %}<p>继承了 base.html 文件</p>
{% endblock %}

文件首先使用{% extends “base.html” %}加载了base.html,表示base.html是该文件的父文件。base.html我们在下面分析。
该文件有一个名为mainbody 的{% block %}{% endblock %}标签,该标签是可以和继承文件或被继承文件替换。
所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。
因此在输出了base.html文件后就会输出<p>继承了 base.html 文件</p>

4. base.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>模板继承</title>
</head>
<body>
    <h1>Hello World!</h1>
    <p> Django 测试。</p>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
</body>
</html>

该文件就是一个普通的html文件
中间的

    {% block mainbody %}
       <p>original</p>
    {% endblock %}

就是对应子文件的mainbody
这里我们前面带过来的context参数没起到作用,修改base.html和hello.html文件。把base.html中的<h1>Hello World!</h1>注释掉
这里写图片描述
在hello.html的block中添加<h1>{{ hello }}</h1>:
这里写图片描述
启动项目后,页面输出:
这里写图片描述
成功将context参数输出。

猜你喜欢

转载自blog.csdn.net/weixin_35737303/article/details/80437419