博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django的模板系统
阅读量:5037 次
发布时间:2019-06-12

本文共 2542 字,大约阅读时间需要 8 分钟。

1.一个简单的模板例子:

Ordering notice

Ordering notice

Dear {

{ person_name }},

Thanks for placing an order from {

{ company }}. It's scheduled toship on {
{ ship_date|date:"F j, Y" }}.

Here are the items you've ordered:

    {% for item in item_list %}
  • {
    { item }}
  • {% endfor %}
{% if ordered_warranty %}

Your warranty information will be included in the packaging.

{% else %}

You didn't order a warranty, so you're on your own whenthe products inevitably stop working.

{% endif %}

Sincerely,

{
{ company }}

  •  用两个大括号括起来的文字(例如 {
    { person_name }} )称为 变量(variable)
  • 被大括号和百分号包围的文本(例如 {% if ordered_warranty %} )是 模板标签
  • filter过滤器的例子,它是一种最便捷的转换变量输出格式的方式。 如这个例子中的{
    {ship_date|date:”F j, Y” }},我们将变量ship_date传递给date过滤器,同时指定参数”F j,Y”。date过滤器根据参数进行格式输出.

2.模板系统工作原理

  • 在Python代码中使用Django模板的最基本方式如下:

    1. 可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Template 对象;
    2. 调用模板对象的render方法,并且传入一套变量context。它将返回一个基于模板的展现字符串,模板中的变量和标签会被context值替换; 

  • >>> from django import template>>> t = template.Template('My name is {
    { name }}.')>>> c = template.Context({
    'name': 'Adrian'})>>> print t.render(c)My name is Adrian.>>> c = template.Context({
    'name': 'Fred'})>>> print t.render(c)My name is Fred.
    • 系统会在下面的情形抛出 TemplateSyntaxError 异常:

      • 无效的tags
      • 标签的参数无效
      • 无效的过滤器
      • 过滤器的参数无效
      • 无效的模板语法
      • 未封闭的块标签 (针对需要封闭的块标签)

3.模板的渲染

    • 一旦你创建一个 Template 对象,你可以用 context 来传递数据给它。 一个context 是一系列变量和它们值的集合
    • context 在 Django 里表现为 Context 类,在 django.template 模块里。它的构造函数带有一个可选的参数: 一个字典映射变量和它们的值。 调用 Template 对象 的 render() 方法并传递 context 来填充模板:
    • >>> from django.template import Context, Template>>> t = Template('My name is {
      { name }}.')>>> c = Context({
      'name': 'Stephane'})>>> t.render(c)u'My name is Stephane.'

      t.render(c) 返回的值是一个 Unicode 对象,不是普通的 Python 字符串。 你可以通过字符串前的 u 来区分。 在框架中,Django 会一直使用 Unicode 对象而不是普通的字符串。

    • 字典和Contexts

      • 变量名必须由英文字符开始 (A-Z或a-z)并可以包含数字字符、下划线和小数点。 (小数点在这里有特别的用途,稍后我们会讲到)变量是大小写敏感的
      • 在 Django 模板中遍历复杂数据结构的关键是字符 (.)。

        最好是用几个例子来说明一下。 比如,假设你要向模板传递一个 Python 字典。 要通过字典键访问该字典的值,可使用一个句点:

      • >>> from django.template import Template, Context>>> person = {
        'name': 'Sally', 'age': '43'}>>> t = Template('{
        { person.name }} is {
        { person.age }} years old.')>>> c = Context({
        'person': person})>>> t.render(c)u'Sally is 43 years old.'

         

--------------------------------------------------

4.用render_to_response()简化views层

简化操作,不同加载模板那个过程render_to_response() 的第一个参数必须是要使用的模板名称。 如果要给定第二个参数,那么该参数必须是为该模板创建 Context 时所使用的字典。 如果不提供第二个参数, render_to_response() 使用一个空字典。

 

转载于:https://www.cnblogs.com/zzblee/p/4725004.html

你可能感兴趣的文章
心有所向,逐之
查看>>
java test
查看>>
13.敏捷项目管理——超越范围、进度和成本笔记
查看>>
00.敏捷回顾——引言笔记
查看>>
3.2.3.1 匹配单个字符
查看>>
字符串逆序的方法
查看>>
该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改。...
查看>>
C50和机器学习
查看>>
Java中this用法总结
查看>>
Sharepoint学习笔记—习题系列--70-573习题解析 -(Q28-Q31)
查看>>
关于使用Timer定时监测网络是否ping通
查看>>
定时器setTimeout()的传参方法
查看>>
导出成WORD文档(转)
查看>>
MyCat 枚举分片设计思考,查询命中条件
查看>>
selenium 截图 java、python、ruby,
查看>>
Maven 的聚合
查看>>
sbt使用详解
查看>>
Mybatis初步
查看>>
vue+uwsgi+nginx部署luffty项目
查看>>
ios晋级之路-CALayer以及动画CABaseAnimation
查看>>