webpy 模版语言

webpy框架拥有自己的模版语言Templetor

Templetor具有Python的语言风格

可以直接嵌入Python代码

$code:
  videoIn = post.filename and post.filename.split(‘.‘)[-1] in [‘MP4‘]
  imageIn = post.filename and post.filename.split(‘.‘)[-1].upper() in [‘JPG‘]

Templetor所使用的转义字符是$, $code:表示接下来的是Python代码

与Python一样,Templetor需要保持正确的缩进,而没有标识模版开始与结束的语句

一、模版中的变量

使用模版的一个重要原因是,不同的页面只有少许文字的差异,模版在那些不同的地方定义适当的变量就可以很好地解决这个问题

Templetor模版语言中,在模版的开始,需要用$define with声明模版所使用的变量

hello.html

$def with (name)
Hello $name!

声明的变量必须与视图函数传入的变量保持一致,

render = web.template.render(‘templates‘)
return render.hello(‘world‘)

web.template.render创建了一个渲染函数,‘templates‘是模版所在的目录

hello表示模版的名称,‘world‘便是传入模版的参数

和Python一样,模版语言中的变量也有不同的类型

如果是字符串或数值,$variable便可直接获得变量的值

非常不错的一个地方是,变量还可以是数组,字典,你可以用和Python相同的方式在模版中进行引用

但更为方便的是使用for循环控制结构

$for post in posts: #和Python完全相同的语法
  <div class="item">
    <a href="/view/$post.id">$post.title</a>
    $if context.user != ‘anonymous‘ and context.user == post.username:
      <div class="edit"><a href="/edit/$post.id">Edit</a></div>
    <div class="date">$post.posted_on[0:19]</div>
    <div>$post.content[0:100]</div> #对于字符串一样地可以进行切片
  </div>

需要注意的是在控制结构中,引用变量不再需要在前面加上$符号

二、模版的继承

使用模版的一个重要原因在于,网页包含许多共同的导航栏或是页脚,可以设计一个基础的模版,然后在此基础上进行扩展

render = web.template.render(‘templates‘, base=‘base‘)

base.html(.html被省略)就是这个基础模版,

父模版和其他模版一样需要在首行声明,所引用的变量

$def with (page)

在视图函数中会隐式地将子模版传入page变量中

通过$:page可以获得子模版的全部内容

你可以在子模版中定义变量,这在子模版中有引用css文件时变得尤为必要

$var cssfiles: /static/index.css /static/common.css #甚至用一个变量可以引用多个css文件

在父模版中,便可吧css文件的引用放在合适的位置

<head>
$if page.has_key(‘cssfiles‘): #判断子模版中是否定义了cssfiles变量
  $for f in page.cssfiles.split():
    <link rel="stylesheet" href="$f" type="text/css">
</head>
时间: 2024-10-06 16:15:13

webpy 模版语言的相关文章

模版语言 实现瀑布流页面

模板 1.模版的执行 模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户. def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)

django -- url (模版语言 {% url &#39;test1&#39; param1=5 param2=6 %})

如果想让form表单提交的url是类似 action="/index-5-6.html" 这样的,可以在html模版语言中使用{% url 'test1' param1=5 param2=6 %} urls.py from django.conf.urls import url, include from mytest import views urlpatterns = [ url(r'^index-(?P<param1>\d+)-(?P<param2>\d+

puppet(4)-类、模版语言、模块

puppet(4)-类.模版语言.模块 代码重用: class, module 类 类是用于公共目的的一组资源,是命名的代码块,创建后可在puppet全局进行调用,类可以继承类是我们构建模块的基本组件 类:命名的puppet代码块,好处就是可以重复调用,需要时可通过名称进行调用: class my_class { ...puppet code... } puppet code: 包含变量赋值.各种条件判断语句.资源声明等等; 注意: 类的名字只能以小写字母开头 调用类: include clas

Django模版语言

Django模版语言 常用语法 只需要记两种特殊符号: {{ }}和{% %} 变量相关的用{{}},逻辑相关的用{% %} 变量 {{ name }} --->变量 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值. 例子: view中的代码: def template_test(request): l = [11, 22, 33] d = {"name": "alex"} class Person(object):

Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版

include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字(接口),在有该版块的页面中直接导入即可 语法:{% include '版块页面的路径' %} ''' 公共的页面版块 <!-- templates/public.html --> <!-- 该页面位公共的页面代码块,所以不需要完整的html页面结构 --> <div class=

【Flask模版语言Jinja2】 -- 2019-08-07 10:37:14

目录 流程控制 模版语言转义 在模版中使用Python函数 Jinja2模版复用之block Jinja2模版引用之include Jinja2模板宏定义之macro 原创: http://106.13.73.98/__/26/ @(Jinja2模版语言) *** 补充,导入静态文件: <link rel="stylesheet" href="{{ url_for('static', filename='css/clock.css') }}"> Fals

【Flask模版语言Jinja2】 &#565429;

目录 流程控制 模版语言转义 在模版中使用Python函数 Jinja2模版复用之block Jinja2模版引用之include Jinja2模板宏定义之macro 原文: http://blog.gqylpy.com/gqy/335 "@(Jinja2模版语言) *** 补充,导入静态文件: <link rel="stylesheet" href="{{ url_for('static', filename='css/clock.css') }}"

Django 模版语言详解

一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "base_generic.html" %} {% block title %}{{ section.title }}{% endblock %} {% block content %} <h1>{{ section.title }}</h1> {% for story in s

Django入门(三) &nbsp; 前端模版语言

经过前面两节的讲解,我们现在已经可以通过引入外部的样式对我们的html页面进行装饰了.但是不论我们再如何装饰,发布出来的html也只是个静态的页面.比如我们现在需要每次页面刷新的时间都在页面上展示出来.静态页面的内容都是写死的,那现在我们尝试用动态的的语言来实现我们的功能. django中实现动态页面需要从两个地方进行处理: 1.应用文件夹app01中的views.py要修改index()函数的内容定义要传给html页面的变量内容 2.在html页面代码中加入jinja格式的动态脚本语言,将in