基于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)

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Django是一个基于Python的Web框架,它提供了一套完整的MVC架构,可以帮助开发者快速构建高质量的Web应用程序。Django具有强大的ORM(对象关系映射)功能,可以轻松地与数据库进行交互,同时还提供了丰富的模板系统和表单处理功能,使得开发者可以快速构建出具有良好用户体验的Web应用程序。Django还支持多种认证和授权方式,可以轻松地实现用户管理和权限控制。总之,Django是一个非常强大的Web框架,可以帮助开发者快速构建出高质量的Web应用程序。 ### 回答2: Django是基于Python的开源Web框架和Web应用程序开发工具包,是由Lawrence Journal-World开发的。Django遵循了MVC的设计模式,使开发人员能够轻松构建功能齐全的Web应用程序。它提供了一种简化Web开发流程的高水平抽象,并且具有可重用和可插拔组件,这使得构建需要许多功能的大型Web应用程序变得容易。 Django的核心组件包括: 1.模型层 - Django的模型使开发人员能够将数据库中的数据转换为Python对象,从而更轻松地处理数据。它提供了许多工具和函数来管理数据库,实现ORM映射,为开发人员提供了灵活性和可扩展性。 2.视图层 - Django的视图层是处理请求和生成响应的核心。开发人员编写视图来将数据呈现给用户,并处理来自用户的任何输入。Django还提供了许多功能强大的模板引擎,使开发人员能够以可重用的方式处理视图数据并轻松地生成HTML。 3.控制器层 - Django的控制器层是URL调度程序,它将某个URL映射到具体的视图。这个过程是通过URLconf(URL配置)模块执行的。这使得开发人员可以更轻松地处理诸如URL重定向、URL重写和URL名称空间等问题。 除了这些核心组件之外,Django还提供了许多其他有用的功能,如内置的用户认证系统、安全功能、缓存支持等等,这些功能都使得构建Web应用程序变得更加容易和快速。 总之,Django是现代、快速、灵活而且功能齐全的Web框架,它提供了一种开发高质量Web应用程序的理想方式。通过使用Django开发人员可以专注于应用程序的业务逻辑,而无需关注基础结构。 ### 回答3: Django是一个基于Python的全栈Web框架,采用MVC(Model-View-Controller)设计模式,它通过提供高度可重用的组件和工具,简化了Web应用程序的开发过程。 Django的主要功能包括: 1. 提供了强大的URL路由系统,使得用户能够根据不同的URL地址来匹配不同的视图函数。 2. 集成了ORM框架,可以很方便的操作数据库,支持多种数据库类型。 3. 提供了Template模板引擎,简化了前端页面的开发过程,同时支持快速灵活的渲染。 4. 自带管理后台系统,能够帮助用户快速构建数据管理界面。 5. 提供了一些基本的安全措施,如XSS和CSRF防护等,保障了Web应用的安全性。 6. 提供了强大的模块化开发能力,可以通过自定义Middleware、模板标签、自定义过滤器等方式加强自己的Web应用。 使用Django可以帮助我们快速开发高质量的Web应用,同时提高开发效率,减少开发难度。Django具有使用方便,可扩展性强,安全性高的优点,可以适用于各种规模的项目。它在不断的更新和发展,已经成为Python社区中最受欢迎的Web框架之一。 总之,Django提供了丰富的功能和工具,能够为我们的Web应用程序提供全面的支持。它简化了Web应用的开发、维护和扩展,为我们节约了大量的时间和工作量,是Web应用程序开发的强大框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值