今日马报开奖结果

轻松搞定 Django 模板语言进阶!香港挂牌主论坛
更新时间:2019-09-28

  模板继承允许你建立一个基本的骨架模板, 它包含了网站中所有常见的元素,并定义了可以被子模板覆盖的 块(blocks) 。示例:

  它定义了一个简单的 HTML 骨架文档, 假设这是一个简单的两列页面。子模板的工作就是填充空的 块(block) 中的内容。

  在这个例子中, block 标签定义了三个可以被子模板填充的块。block标签告诉了模板系统哪些地方可能被子模板覆盖。例如,子模板可能如下:

  extends 标签告诉模板系统这个模板继承了另外的模板。当模板系统对此模板进行运算时, 首先会寻找他的父模板 ——在这里是base.html。

  在这一点上, 模板引擎会在 base.html 中发现三个 block 标签, 并且使用子模板的内容替换掉这些块。根据变量blog_entries 的值, 输出可能看起来像这样:

  注意:因为子模板没有定义 sidebar 块, 那么父模板的内容就会被使用。通常来说, 父模板 {% block %} 中的内容会被作为备用的内容,在子模板没有覆盖时就会被使用。

  {% extends %}必须位于模板的最开始, 如果在其他的部分声明, 则不生效。

  在基础模板尽可能多的使用{%block%} ,子模板不需要定义所有父模板中的块, 所以你可以在若干的块中填充默认值, 然后定义之后需要自定义的块, 有更多的可用块总是更好的。

  如果发现自己在许多模板中有重复内容的了, 这可能需要移动这些内容到父模板的 {% block %} 中。

  如果需要得到父模板块中的内容, 可以用{{ block.super }} 变量。493333开马02、三步踩一拖二(旌德灯光球场舞蹈队!使用 {{ block.super }} 插入的数据不会被自动转义 ,因为它已经被转义了。如果需要转义, 可以在父模板中转义。

  使用模板标签在{% block %}块外部创建的变量不能在块内使用。例如,这个模板不渲染任何东西:

  在一个较长的模板中, 这个方法可以让你知道是哪一个{% block %} 标签定义结束了。

  不能在同一模板中定义多个具有相同名称的块标签。存在这个限制是因为{%block%}标签是双向定义的。也就是说, 它不仅指定了子模板要填充父模板的哪个块, 也说明了父模板要引用哪些子模板块的内容。所以在子模板中有多个同名的{%block%}标签时, 父模板就不知道到底要引用子模板中哪个块的内容了。

  从模板生成HTML时, 总是有一种风险, 即一个变量将会影响生成的HTML字符。考虑这个模板片段:

  用户提交的数据是不可靠的且不应被直接插入到您的网页, 因为恶意用户可以使用这种潜在的漏洞做危害网站的事情。这种类型的安全漏洞被称为 Cross Site ing (跨站脚本) (XSS) 攻击。

  确保让不受信任的变量经过了 escape 过滤器 , 将危险的HTML字符替换为无害的HTML转义字符。香港挂牌主论坛。但是这常常被忽略。

  在Django中, 默认每个模板会自动转义输出的每一个变量标签。具体来说, 这五个字符会被转义:

  这种行为是默认的。如果使用的是Django的模板系统, 自然拥有这种保护。

  要在模板中控制自动转义, 可以在整个模板 (或者模板的特定区域) 使用 autoescape 标签, 如:

  autoescape 标签接受 on 或 off 作为参数。如果需要在某个区域禁用自动转义,可以这样使用:

  如果使用自动转义的模板文本块中使用{%block%}包含了子模板,那么子模板中也将使用自动转义,如果基模板中关闭了自动转义,那么子模板中也将关闭自动转义:

  模板的开发者并不需要对自动转义太过关注. 这是编写Python的开发者 (写视图和写自定义模板标签的人) 需要考虑的事. 所以, 你只需要做和模板有关的活。如果你不确定模板在何时会进行自动转义(或不进行), 那么就向所有需要转义的变量添加 escape 过滤器. 当自动转义被打开, escape 过滤器不会再次转义 -- escape 过滤器不会影响自动转义的变量。

  作为过滤器参数的字符串都不会自动转义, django认为它们已经经过safe 过滤。这么做的原因是模板的开发者可以控制字符的输出, 所以他们应该确保正确的使用转义后的HTML字面值。

  大多数附加到对象上的方法都可以在模板中调用,这使得模板可以从视图中传递过来的上下文变量中获取对象属性之外的值。

  例如, Django ORM 提供了 entry_set 语法寻找一个与外键所关联的对象的集合。因此, 如果有一个叫 comment 的模型有外键指向了模型 task,你可以通过给定一个实际的 task模板变量, 像这样循环输出与它相关联所有的 comment对象:

  如果你在一个模型中显示定义了一个方法,你也可以在对应的模板变量中引用它:

  注意:由于Django有意限制了模板中语言逻辑的处理,所以不能在模板内调用对象方法时向其传递参数。数据应当在视图中计算完成后,再传递给模板。

  作者简介:单雨,90后工科男,伪文艺青年。目前就读于北京理工大学宇航系,喜欢研究AI,网络爬虫,微信小程序以及机器人,痴迷于Coding,睡前必撸码。返回搜狐,查看更多