Python网络编程08----Django模版

Django模板系统是一种用于分离文档表现和内容的技术,主要由变量、模板标签和过滤器组成。模板标签包括if/else、for循环,以及模板继承和block功能,允许逻辑判断和循环操作。过滤器则可以修改变量的显示,如date格式化。此外,模板继承提供了一种代码复用的方式,而include标签可以插入其他模板内容。在视图中,通过Context传递数据给模板并使用render方法进行渲染。模板设计原则是保持HTML和Python的分离,提高代码的可维护性和设计灵活性。
摘要由CSDN通过智能技术生成

模板系统基本知识

模板是一个文本文件(可以是HTML,XML,CSV等任何文本格式),同时包含了静态内容(例如HTML)和动态标记的逻辑,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。使用哪个模版以及渲染什么数据是由视图函数本身(通过显式的渲染或者使用render_to_response)或者视图的参数(比如通用视图里的template_name参数)决定的。
Django的模版语言是给前端工程师使用的,他们不一定是程序员。再加上将逻辑和表现分开的愿望,模版语言绝对不是嵌入式的Python
举个例子。 该模板描述了一个向某个与公司签单人员致谢 HTML 页面:

<html>
<head><title>Ordering notice</title></head>
<body>
<h1>Ordering notice</h1>
<p>Dear {
  { person_name }},</p>          {#用两个大括号括起来的文字称为变量(variable) 。这意味着在此处插入指定变量的值。 #}
<p>Thanks for placing an order from {
  { company }}. It's scheduled to
ship on {
  { ship_date|date:"F j, Y" }}.</p> {#这是一个filter过滤器的例子#}
<p>Here are the items you've ordered:</p>
<ul>
{% for item in item_list %}
 <li>{
  { item }}</li>
{% endfor %}
</ul>
{% if ordered_warranty %}        {#被大括号和百分号包围的文本是模板标签。标签(tag)定义比较明确,即: 仅通知模板系统完成某些工作的标签。#}
 <p>Your warranty information will be included in the packaging.</p>
{% else %}
 <p>You didn't order a warranty, so you're on your own when
 the products inevitably stop working.</p>
{% endif %}
<p>Sincerely,<br />{
  { company }}</p>
</body>
</html>

以上就是一个模版。该模板是一段添加了些许变量和模板标签的基础 HTML 。
用两个大括号括起来的文字(例如 { { person_name }} )称为 变量(variable) 。这意味着在此处插入指定变量的值。
被大括号和百分号包围的文本(例如 {% if ordered_warranty %} )是 模板标签(template tag) 。标签(tag)定义比较明确,即: 仅通知模板系统完成某些工作的标签。这个例子中的模板包含一个for标签( {% for item in item_list %} )和一个if 标签( {% if ordered_warranty %} )

for标签类似Python的for语句,可让你循环访问序列里的每一个项目。
if 标签,正如你所料,是用来执行逻辑判断的。 在这里, tag标签检查ordered_warranty值是否为True。如果是,模板系统将显示{% if ordered_warranty %}和{% else %}之间的内容;否则将显示{% else %}和{% endif %}之间的内容。 {% else %}是可选的。

最后,这个模板的第二段中有一个关于filter过滤器的例子,它是一种最便捷的转换变量输出格式的方式。如这个例子中的{ {ship_date|date:”F j, Y” }},我们将变量ship_date传递给date过滤器,同时指定参数”Fj,Y”。 date过滤器根据参数进行格式输出。 过滤器是用管道符(|)来调用的,用法类似于Unix管道符。

使用模板

看看下面的例子

>>> from django import template
>>> from django.conf import settings                      #python需告诉Django使用哪个设置文件,否则不能使用template
>>> text1=template.Template('大家好我是{
   {name}}')         #创建Template对象
>>> text2=template.Context({
  'name':"王大锤"})             #使用Context传递数据
>>> text1.render(text2)
'大家好我是王大锤'

这就是使用Django模板系统的基本规则: 写模板,创建 Template 对象,创建 Context , 调用 render() 方法

基本的标签和过滤器

标签

if/else

{ % if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内容,例如:

{% if today_is_weekend %}
 <p>Welcome to the weekend!</p>
{% else %}                           {
  #{% else %}是可选的#}
 <p>Get back to work.</p>
{% endif %}

{ % if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ),但是{% if %} 标签不允许在同一个标签中同时使用 and 和 or ,因为逻辑上可能模糊的,例如,如下示例是错误的: 比如这样的代码是不合法的:

{% if athlete_list and coach_list or cheerleader_list %}      {
  #这个是错误的#}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值