from django.shortcuts import render
def test_filter(request):
str="Hello Tom"
num=100
html="hello"
return render(request,"test_html.html",locals())
在templates目录下创建test_html.html文件,内容太如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test_fortitle>
head>
<body>
<p>字符串小写:{
{str|lower}}p>
<p>字符串大写:{
{str|upper}}p>
<p>整数加法:{
{num|add:'200'}}p>
<p>html 默认:{
{html}}p>
<p>html safe:{
{html|safe}}p>
body>
html>
在浏览器打开http://127.0.0.1:8080/test_filter,结果如下:这里可以看出,django默认的是把html文本作为纯文本处理的,只有显示的告诉django这是safe的,django才会按照html的语法去解析
如下图所示,通常情况下,一个网站的顶部和底部,甚至有的侧边朗都是完全一样的,不同的仅仅是中间的内容部分,如果不使用继承,在每个页面都必须要做头部和尾部,这样带来一个问题就是如果头部或尾部需要修改,则所有页面都需要修改,这显然不符合常规做法
模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容,并可以覆盖覆膜板中的相应的块
语法:父模板中
语法:子模板
继承模板extends标签(写在模板文件的第一行)
如:
{
% extends 'base.html' %}
子模板重写父模板中的内容块
{% block block_name %}
子模板块用来覆盖父模板块中block_name块的内容
{% endblock %}
from django.shortcuts import render
def base_view(request):
return render(request,"base.html")
def index1_view(request):
return render(request,"index1.html")
def index2_view(request):
return render(request,"index2.html")
在templates目录下创建base.html,index1.html,index2.html三个文件
base.html:定义了两个可以被继承修改的块,title和info
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block title %}
<title>网站首页title>
{% endblock %}
head>
<body>
<a href="/base_view">网站首页a>
<a href="/index1_view">第一个index页面a>
<a href="/index2_view">第二个index页面a>
<br>
{% block info %}
这是主页
{% endblock %}
<br>
<h3>有问题请联系400000001h3>
body>
html>
index1.html
{% extends "base.html" %}
{% block title %}
<title>第一个index页面title>
{% endblock %}
{% block info %}
<p>欢迎来到第一个index页面p>
{% endblock %}
index2.html
{% extends "base.html" %}
{% block title %}
<title>第2个index页面title>
{% endblock %}
{% block info %}
<p>欢迎来到第二个index页面p>
{% endblock %}
浏览器打开 http://127.0.0.1:8080/base_view,然后点击三个链接,可以看到不管切换到哪个网页,头部和底部都是不变的,只有中间正文以及页面名称才会发生改变