基于django的web模板系统

1    django模板系统介绍

           1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便
           2,其次,写后台Python代码与设计HTML是不同的工作,更专业的Web开发应该将两者分开页面设计者和HTML/CSS程序员不应该编辑Python代码,他们应该与HTML打交道
           3,程序员写Python代码同时页面设计者写HTML模板会更高效,而不是一个人等待另一个人编辑同样的文件因此,使用Django的模板系统分离设计和Python代码会更干净更易维护
           简单来说:

           变量要和html尽量分开

            html和python要分开

2 表达内容 表达形式

   1、确定表达的形式

      加载模板

2、确定表达的内容

1、表达内容需要时字典格式

2、封装数据

From django.template import Template

Context(data)

3、表达的形式加载表达的内容

Template.render(context(data))

举一些例子

from django.template import Template,Context



def invite(request,name):

template = Template(

"""

谨定于 {{ year }} 年 {{ month }} 月 {{ day }} 日:<br>

农历 {{ calendar }} 为 {{ groom }} {{ birde }} 举办 婚礼,略备薄酒,恭候 {{ sir }} 光临{{ hotel }}.<br>

地址:{{ address }}<br>

敬约 恕邀<br>

时间: 下午{{ time }} 恭候<br>

"""

)

data = Context({

"year":"2019",

"month":"3",

"day":"28",

"calendar":"腊月初五",

"groom":"喜洋洋",

"birde":"暖洋洋",

"sir":name,

"hotel":"羊村大酒店",

"address":"青青草原羊村路48羊村大酒店三楼",

"time":"六时整",

})

result = template.render(data)

return HttpResponse(result)

3 认识一下django模板标签语言

Django拥有一套完善的模板系统。

变量

{{ 变量 }}

1、传入前端的变量最外层一定是一个字典

2、具体的变量可以是 字符串、列表、字典等类型

3、变量通过.方法可以调用自己的无参数方法、索引

4、如果变量是字典也可以通过.键调用值

def variable(request):

"""

变量案例

"""

tem = Template(

"""

<p>

变量常规用法:{{ variable }}

</p>

<p>

变量常规用法_变量列表:{{ variable1 }}

</p>

<p>

变量常规用法_变量索引:{{ variable1.1 }}

</p>

<p>

变量常规用法_变量无参数方法:{{ variable2.upper }}

</p>

<p>

变量常规用法_变量字典:{{ variable3 }}

</p>

<p>

变量常规用法_变量字典键取值:{{ variable3.name }}

</p>

"""

)

data = Context({

"variable": "老边",

"variable1": [1,2,3,4],

"variable2": "laobian",

"variable3": {"name":"老边","age":18},

})

result = tem.render(data)

return HttpResponse(result)

标签

{% if %}

1、判断指定条件true或者false,通常判断一个变量是否存在或者为真

2、{% if %} 标签需要 {% endif %} 标签进行闭合

3、{% if %} 可以有 {% else %}

def label_if(request):

"""

if 标签

"""

tem = Template(

"""

{% if username %}

<p>欢迎登陆 {{ username }} </p>

{% else %}

<p>

<a href="#">

请登陆

</a>

</p>

{% endif %}

"""

)

data = Context({

"username": "老边",

})

result = tem.render(data)

return HttpResponse(result)

{% ifequal %}

1、判断两个量是否相等,通常用于比较

2、{% ifequal %} 标签需要 {% endifequal %} 标签进行闭合

3、{% ifequal %} 可以有 {% else %}

def label_ifequal(request):

"""

ifequal 标签

"""

tem = Template(

"""

{% ifequal gender "M" %}

<p>欢迎登陆 {{ username }} 先生 </p>

{% else %}

<p>欢迎登陆 {{ username }} 女士 </p>

{% endifequal %}

"""

)

data = Context({

"username": "老边",

"gender": "W"

})

result = tem.render(data)

return HttpResponse(result)

{% for %}

1、{% for %} 标签需要 {% endfor %} 标签进行闭合

2、{% for %} 标签采用了和python一样的for in结构。

3、{% for %} 循环出来的不是html对象只是数据

def label_for(request):

"""

ifequal 标签

"""

tem = Template(

"""

<table>

<tr>

<th>

标题

</th>

<th>

作者

</th>

<th>

类型

</th>

<th>

封面

</th>

</tr>

{% for article in articles %}

<tr>

<td>

{{ article.title }}

</td>

<td>

{{ article.author }}

</td>

<td>

{{ article.type }}

</td>

<td>

<img style = "width:100px;height:100px;" src="{{ article.picture }}">

</td>

</tr>

{% endfor %}

</table>

"""

)

data = Context({

"articles": [

{"title": "背影","author": "朱自清","type": "散文", "picture":"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553750586542&di=18fa022c5ec799d65558c2bf299d0023&imgtype=0&src=http%3A%2F%2Fimg3.duitang.com%2Fuploads%2Fitem%2F201507%2F05%2F20150705135641_K4sVA.jpeg"},

{"title": "诛仙", "author": "萧鼎", "type": "小说", "picture": "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=328549116,1379468112&fm=26&gp=0.jpg"},

{"title": "西游记", "author": "吴承恩", "type": "小说","picture": "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4100856954,312579948&fm=26&gp=0.jpg"},

{"title": "鲁宾逊漂流记", "author": "丹尼尔·笛福", "type": "小说", "picture": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553750785199&di=d906d54cf8456736d285b99f601bb968&imgtype=jpg&src=http%3A%2F%2Fimg4.imgtn.bdimg.com%2Fit%2Fu%3D1665326279%2C2802541090%26fm%3D214%26gp%3D0.jpg"},

{"title": "活着", "author": "余华", "type": "小说", "picture": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553750868172&di=ccae9a343204f59cecbcc21c9e811e58&imgtype=0&src=http%3A%2F%2Fs1.sinaimg.cn%2Flarge%2F001Pe7mxzy76VARpXvdc3"},

],

})

result = tem.render(data)

return HttpResponse(result)

{{ forloop }}

1、forloop是django模板语言定义好的一个变量,用来表示循环当中的每次循环

2、Forloop为嵌套循环提供了parentloop参数来记录当前循环的上一层循环的情况

3、通常我们使用forloop标签进行循环的开头或者末尾判断

def label_forloop(request):

"""

forloop 教学版

"""

tem = Template(

"""

<h3>单层循环</h3>

<ul>

{% for i in range %}

{% for title in articles %}

<li>

{{ title }} 是第 {{ forloop.counter }} 次循环 他的父循环是第 {{ forloop.parentloop.counter }} 次循环

</li>

{% endfor %}

{% if not forloop.last %}

<p> ============================================================= </p>

{% endif %}

{% endfor %}

"""

)

data = Context({

"articles": ["背影", "诛仙", "西游记", "鲁宾逊漂流记", "活着"],

"range": "abc"

})

result = tem.render(data)

return HttpResponse(result)

过滤器,对变量进行具体功能的处理

{{ | }}

Safe 去掉前端转义

def filter(request):

template = Template(

"""

{{ argv|safe }}

"""

)

context = Context(

{"argv": "<img src='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553764577707&di=8606cc4a988ec1bc8e6b3924fdfa8790&imgtype=0&src=http%3A%2F%2Ftc.sinaimg.cn%2Fmaxwidth.2048%2Ftc.service.weibo.com%2Finews_gtimg_com%2F0fcdfe79cf544cf40f75f5d15511a159.jpg'>"}

)

result = template.render(context)

return HttpResponse(result)

今天先介绍到这里   感兴趣的朋友可以敲一敲

猜你喜欢

转载自blog.csdn.net/weixin_44303465/article/details/88933606