| 1 | Nevow XML Templates |
|---|---|
| 2 | =================== |
| 3 | |
| 4 | Stan syntax is cool, but eventually you are going to want to integrate your |
| 5 | Python code with a template designed by an HTML monkey. Nevow accomplishes this |
| 6 | by providing an xmlfile loader which uses the built-in Python SAX libraries to |
| 7 | generate a tree of stan behind the scenes. The general rule is anything that is |
| 8 | possible in stan should be possible in a pure XML template; of course, the XML |
| 9 | syntax is generally going to be much more verbose. |
| 10 | |
| 11 | * `loaders.xmlfile`_ |
| 12 | * `Nevow's xmlns declaration`_ |
| 13 | * `Nevow's Tag Attribute Language`_ |
| 14 | * `nevow:render`_ |
| 15 | * `Built-in renderers`_ |
| 16 | * `nevow:data`_ |
| 17 | * `nevow:pattern`_ |
| 18 | * `nevow:slot`_ |
| 19 | * `nevow:attr`_ |
| 20 | * `nevow:invisible`_ |
| 21 | * `xmlstr, htmlfile, and htmlstr`_ |
| 22 | |
| 23 | loaders.xmlfile |
| 24 | --------------- |
| 25 | |
| 26 | Wherever you have seen a loaders.stan being created in any of the example code, |
| 27 | a loaders.xmlfile can be substituted instead. At the most basic, xmlfile merely |
| 28 | requires the name of an xml template:: |
| 29 | |
| 30 | class HelloXML(rend.Page): |
| 31 | docFactory = loaders.xmlfile('hello.xml') |
| 32 | |
| 33 | Placing the following xml in the hello.xml file will cause HelloXML to display a |
| 34 | static page when it is rendered:: |
| 35 | |
| 36 | <html>Hello, world!</html> |
| 37 | |
| 38 | The following additional keyword arguments may be given to xmlfile to configure |
| 39 | it: |
| 40 | |
| 41 | templateDirectory |
| 42 | The path to the directory which contains the template file. Defaults to ''. |
| 43 | |
| 44 | ignoreDocType |
| 45 | If True, discard any DOCTYPE declaration when building the DOM from this |
| 46 | template. When false, preserve the DOCTYPE, causing it to show up in the final |
| 47 | output. Useful for when you are inserting an XML fragment into a larger page |
| 48 | and do not wish to generate invalid XML as output. Defaults to False. |
| 49 | |
| 50 | ignoreComment |
| 51 | If True, discard XML comments, causing them to disappear from the output. If |
| 52 | False, preserve comments and render them in the final output unchanged. |
| 53 | Defaults to False. |
| 54 | |
| 55 | pattern |
| 56 | If present, the given pattern name will be looked up and used as the root of |
| 57 | the template. If not present, the entire document will be used as the |
| 58 | template. Useful for embedding fragments of an XML document in a larger page. |
| 59 | Defaults to None. |
| 60 | |
| 61 | Nevow's xmlns declaration |
| 62 | ------------------------- |
| 63 | |
| 64 | In order for Nevow to notice and process any XML directives in the template |
| 65 | file, you must declare the Nevow xmlns at the top of your XML document. Nevow's |
| 66 | xmlns is:: |
| 67 | |
| 68 | http://nevow.com/ns/nevow/0.1 |
| 69 | |
| 70 | The syntax for declaring that your xml document uses this namespace is:: |
| 71 | |
| 72 | <html xmlns:nevow="http://nevow.com/ns/nevow/0.1"></html> |
| 73 | |
| 74 | You may replace the text "nevow" in the above example with any name you choose. |
| 75 | For example, many people use "n" because it is shorter to type. If you do so, be |
| 76 | sure to replace all occurrences of the nevow namespace in the examples with the |
| 77 | namespace name you choose. |
| 78 | |
| 79 | Nevow's Tag Attribute Language |
| 80 | ------------------------------ |
| 81 | |
| 82 | The markup you will add to your XHTML file in order to invoke Nevow code |
| 83 | consists mostly of namespaced tag attributes. This approach was influenced |
| 84 | heavily by the Zope Page Templates (ZPT) Tag Attribute Language (TAL). However, |
| 85 | I felt that TAL did not go far enough in removing control flow and branching |
| 86 | possibilities from the XML template. Nevow's main philosophy is that it should |
| 87 | be as easy as possible to move from the XML document into Python code, and that |
| 88 | the Python code should have ultimate control over manipulating the structure of |
| 89 | the XML template. |
| 90 | |
| 91 | The key is that it is easy to expose Python methods that you write to your XML |
| 92 | template, and it is easy for the XML templates to mark nodes which it wishes the |
| 93 | Python method to manipulate. In this way, if either the Python implementation |
| 94 | changes or the location or content of the marked nodes change in the XML |
| 95 | template, the other side will be isolated from these changes. |
| 96 | |
| 97 | Nevow's XML templating has two attributes which invoke Python code: |
| 98 | |
| 99 | * nevow:render -- Invokes a Python method and replaces the template node with the result |
| 100 | * nevow:data -- Invokes a Python method and sets the data special for the node to the result |
| 101 | |
| 102 | It has one attribute which marks nodes as manipulatable by Python code: |
| 103 | |
| 104 | * nevow:pattern -- Gives a node a name so that Python code may clone and mutate copies of this node |
| 105 | |
| 106 | It also has two namespaced tags: |
| 107 | |
| 108 | * nevow:slot -- Works in the same way as the slot attribute |
| 109 | * nevow:attr -- Indicates that an attribute of the parent tag should be manipulated by Python code in some way |
| 110 | |
| 111 | nevow:render |
| 112 | ------------ |
| 113 | |
| 114 | When the nevow:render attribute is encountered, the xmlfile loader sets the |
| 115 | render special to a directive constructed with the attribute value. When the |
| 116 | template is rendered, this means that the appropriate render_* method will be |
| 117 | looked up on the IRendererFactory (generally the Page instance):: |
| 118 | |
| 119 | <html><div nevow:render="foo" /></html> |
| 120 | |
| 121 | With the render_foo method:: |
| 122 | |
| 123 | def render_foo(self, ctx, data): |
| 124 | return "Hello" |
| 125 | |
| 126 | Will result in the document:: |
| 127 | |
| 128 | <html>Hello</html> |
| 129 | |
| 130 | Note that the return value of the render method replaces the template node in |
| 131 | the DOM, so if you want the template node to remain, you should use ctx.tag. |
| 132 | |
| 133 | Built-in renderers |
| 134 | ------------------ |
| 135 | |
| 136 | Nevow comes with various built in renderers on the Page class. |
| 137 | |
| 138 | data |
| 139 | Renders the current data as-is inside the current node. |
| 140 | |
| 141 | string |
| 142 | Renders the current data as a string inside the current node. |
| 143 | |
| 144 | sequence |
| 145 | Iterates the current data, copying the "item" pattern for each item. Sets the |
| 146 | the data special of the new node to the item, and inserts the result in the |
| 147 | current node. See the nevow.rend.sequence docstring for information about |
| 148 | other used patterns, including "header", "divider", "footer" and "empty". |
| 149 | |
| 150 | mapping |
| 151 | Calls .items() on the current data, and calls ctx.fillSlots(key, value) for |
| 152 | every key, value pair in the result. Returns the template tag. |
| 153 | |
| 154 | xml |
| 155 | Inserts the current data into the template after wrapping it in an xml |
| 156 | instance. Not very useful in practice. |
| 157 | |
| 158 | nevow:data |
| 159 | ---------- |
| 160 | |
| 161 | When the nevow:data attribute is encountered, the xmlfile loader sets the data |
| 162 | special of the current node to a directive constructed with the attribute value. |
| 163 | When the template is rendered, this means that the appropriate data_* method |
| 164 | will be looked up on the current IContainer (generally the Page instance). The |
| 165 | data_* method will be called, and the result will be set as the data special of |
| 166 | the current Tag:: |
| 167 | |
| 168 | <html><div nevow:data="name" nevow:render="data" /></html> |
| 169 | |
| 170 | With the data_name method:: |
| 171 | |
| 172 | def data_name(self, ctx, data): |
| 173 | return "Hello!" |
| 174 | |
| 175 | Will result in the document:: |
| 176 | |
| 177 | <html><div>Hello!</div></html> |
| 178 | |
| 179 | Note that with a data attribute on a node but no renderer, the result of the |
| 180 | data method will be set as the data special for that tag, and child render |
| 181 | methods will be passed this data. |
| 182 | |
| 183 | nevow:pattern |
| 184 | ------------- |
| 185 | |
| 186 | When the nevow:pattern attribute is encountered, the xmlfile loader sets the |
| 187 | pattern special of the current node to the attribute value as a string. |
| 188 | Renderers which are above this node may then make copies of it using the |
| 189 | nevow.inevow.IQ of the current context. With the template:: |
| 190 | |
| 191 | <html nevow:render="stuff"><div nevow:pattern="somePattern" nevow:render="data" /></html> |
| 192 | |
| 193 | And the renderer:: |
| 194 | |
| 195 | def render_stuff(self, ctx, data): |
| 196 | pat = inevow.IQ(ctx).patternGenerator('somePattern') |
| 197 | return [pat(data=1), pat(data=2)] |
| 198 | |
| 199 | Will result in the document:: |
| 200 | |
| 201 | <html><div>1</div><div>2</div></html> |
| 202 | |
| 203 | nevow:slot |
| 204 | ---------- |
| 205 | |
| 206 | When the nevow:slot tag is encountered, the xmlfile loader constructs a |
| 207 | nevow.stan.slot instance, passing the name attribute value as the slot name. The |
| 208 | children of the slot node are added as children of the new slot instance. This |
| 209 | is useful if you wish to put patterns inside the slot. With the template:: |
| 210 | |
| 211 | <html nevow:render="stuff"><nevow:slot name="slotName" /></html> |
| 212 | |
| 213 | And the render method:: |
| 214 | |
| 215 | def render_stuff(self, ctx, data): |
| 216 | ctx.fillSlots('slotName', "Hello.") |
| 217 | return ctx.tag |
| 218 | |
| 219 | This document will be produced:: |
| 220 | |
| 221 | <html>Hello.</html> |
| 222 | |
| 223 | nevow:attr |
| 224 | ---------- |
| 225 | |
| 226 | When the nevow:attr tag is encountered, the contents of the nevow:attr node will |
| 227 | be assigned to the attribute of the parent tag with the name of the value of the |
| 228 | name attribute. Perhaps an example will be a little clearer:: |
| 229 | |
| 230 | <html><a><nevow:attr name="href">HELLO!</nevow:attr>Goodbye</a></html> |
| 231 | |
| 232 | This document will be produced:: |
| 233 | |
| 234 | <html><a href="HELLO!">Goodbye</a></html> |
| 235 | |
| 236 | While this syntax is somewhat awkward, every other type of nevow tag and |
| 237 | attribute may be used inside the nevow:attr node. This makes setting attributes |
| 238 | of tags uniform with every other method of manipulating the XML template. |
| 239 | |
| 240 | nevow:invisible |
| 241 | --------------- |
| 242 | |
| 243 | Sometimes you need to group some elements, because you need to use a |
| 244 | renderer for a group of children. |
| 245 | |
| 246 | However, it may not be desirable to give these elements a parent/child |
| 247 | relationship in your XML structure. For these cases, use nevow:invisible. |
| 248 | |
| 249 | As suggested by the name, a nevow:invisible tag is removed in the rendered |
| 250 | XML. Here is an example:: |
| 251 | |
| 252 | <html><nevow:invisible nevow:data="name" nevow:render="data" /></html> |
| 253 | |
| 254 | With the data_name method:: |
| 255 | |
| 256 | def data_name(self, ctx, data): |
| 257 | return "Hello!" |
| 258 | |
| 259 | Will result in the document:: |
| 260 | |
| 261 | <html>Hello!</html> |
| 262 | |
| 263 | xmlstr, htmlfile, and htmlstr |
| 264 | ----------------------------- |
| 265 | |
| 266 | xmlstr is a loader which is identical to xmlfile except it takes a string of XML |
| 267 | directly. |
| 268 | |
| 269 | htmlfile and htmlstr should generally be avoided. They are similar to xmlfile |
| 270 | and xmlstr, except they use twisted.web.microdom in beExtremelyLenient mode to |
| 271 | attempt to parse badly-formed HTML (non-XHTML) templates. See the nevow.loaders |
| 272 | docstrings for more information. |
| 273 | |
| 274 | Conclusions |
| 275 | =========== |
| 276 | |
| 277 | Nevow's xmlfile tag attribute language allows you to integrate |
| 278 | externally-designed XHTML templates into the Nevow rendering process. |
| 279 |
相关推荐
青藏高原冻土数据实战:如何用QGIS分析1961-2020年冻土退化趋势(附完整操作步骤)
本文详细介绍了如何使用QGIS分析1961-2020年青藏高原冻土退化趋势,包括数据准备、预处理、时空分析和模型验证等全流程操作。通过TTOP模型和Stefan方程,揭示了冻土退化的空间差异和海拔依赖性,为环境研究提供科学依据。
读取xml报错问题not well-formed (invalid token): line 52, colum16
在获得想要的节点后,修改节点标签名称,然后设置xml保存的编码方式和格式属性,确保读入xml和写入后的xml文件格式保持不变。然后dom = xml.dom.minidom.parse(xml_file)例如:在xml中存在L(B*W)=DN但是python打开后出现乱码。这种情况可以先打开xml文件,其中metaxml是xml的路径字段。2、若xml中出现特殊字符,导致文件无法读取报错。就可以打开xml文件并可以读取xml的相关节点。1、若xml中出现中文字段。3、若xml修改后格式变化。
超详细!DeepSeek本地搭建部署、搭建知识库及智能体教程
通过以上详细的步骤,我们完成了DeepSeek的本地搭建部署、知识库的搭建以及智能体的创建。这一过程不仅让我们深入了解了大模型的应用,还为我们开发个性化的智能应用奠定了基础。在实际应用中,可以根据具体需求进一步优化模型、知识库和智能体的性能和功能。希望本文能帮助大家快速上手DeepSeek相关技术,开启属于自己的人工智能创新之旅。
一篇介绍Nevow的非常好的文章,推荐
Nevow: A Web Application Construction Kit Donovan Preston <dp@divmod.org > Summary Nevow is a web application construction kit, based on the ideas developed in the Twisted Woven pack...
【Qt串口调试助手】1.1 - Qt5编写串口调试助手,Qt串口编程
这章来学习串口数据流操作。仿照成品制作一个自己用Qt编写的串口助手。 1. 布局UI界面 创建QWidget工程,布局UI界面:拖入2个 Plain Text Edit,作为串口数据的接收显示和发送框。 拖入几个 Combo Box 、Label 和 Push Button,使用两个Widget进行布局。如下所示。 将接收区的 Plain Text Edit,属性勾选上 readOnly,使其运行时不会被人为的输入操作影响。 加入一些弹簧,使布局美观。(有必要可以加设置不能调整..
动量因子在A股市场的有效性分析:量化实证研究
验证动量因子在A股市场的有效性及时间周期性分析不同时间窗口(短期/中期/长期)对动量效应的影响量化交易成本、市场流动性对动量策略收益的侵蚀程度比较A股与成熟市场(如美股)动量效应的差异特征理论框架:行为金融学解释动量效应的产生机制技术实现:Python全流程代码实现动量因子计算与回测实证分析:统计检验、风险收益指标、敏感性分析应用拓展:结合市场微观结构的策略优化方案动量因子(Momentum Factor)
小型Python Web框架 Nevow
Nevow ,python web, zhoubols, 周波
基金估值核算系统三国杀:恒生 VS 赢时胜 VS 融选!
本文对比分析了恒生电子、赢时胜和融选科技三家金融科技公司的基金估值系统。恒生电子作为行业龙头,在公募基金领域占据较大份额,其新一代估值系统6.0采用微服务架构,自动化程度高;赢时胜在中型公募和券商资管领域优势明显,其V5.5系统在信创适配和复杂产品处理方面表现突出;融选科技作为新兴厂商,提供轻量化解决方案,适合中小型机构。文章从市场格局、系统定位、技术架构、成本构成和用户反馈五个维度进行深入比较,为金融机构选型提供参考。当前估值系统市场呈现"三国鼎立"格局,各具特色,选型需结合机构规模、
使用twisted+nevow框架简单实例
1. 首先,编写一个HTML文件,helloword.html Hello, world! Hello, world! 2. 编写一个Nevow控制程序文件,helloword.pyfrom nevow import loaders, rendclass HelloWorld(rend.Pa
Hermes 教程 03:Skills 系统
摘要:Hermes Skills是一种自我改进机制,可将解决问题的经验保存为可复用技能文档。v0.13.0版本遵循agentskills.io开放标准,与Claude Skills互通。技能创建流程包括发现问题、创建技能文件、加载使用和优化更新四个阶段。系统提供技能检索和自维护机制(Curator),支持技能媒体路由和多种管理命令。内置技能涵盖开发调试、创意头脑风暴等场景,通过积累技能使Hermes更适应用户需求。
Dify框架面试内容整理-如何进行Dify的二次开发?
无论是轻量修改界面,还是深度集成自定义模型、Agent、知识库,你都可以很方便地进行二次开发。,你可以基于它的开源架构对功能进行扩展、集成第三方服务、修改界面风格,甚至定制新的AI工作流程。前端:Node.js >= 16,React + TypeScript + Tailwind。接入自己的模型API(如:调用LLaMA、Baichuan、ChatGLM)。修改路径:/api/app/services/providers/可接入你自己的向量数据库(Qdrant、Milvus、FAISS)
AssertionError: Badly …
使用 gtk-builder-convert glade_hxw.glade glade_hxw.xml 最后出现如下错误 AssertionError: Badly formed XML, there is no tag. 解决方法 使用文本编辑工具打开 glade_hxw.glade,修改其中的,改成 修改为
【异常】Cursor IDE 扩展主机超时错误处理文档The agent execution provider did not respond within 4 seconds.
该错误通常是 Cursor IDE 的临时性问题,不影响项目代码。大多数情况下,重新加载窗口或重启 IDE 即可解决。如果问题持续,可按上述进阶方案排查。重新加载窗口(最快)重启 IDE检查系统资源清理缓存检查扩展更多关于 AI+教育领域的干货,可以关注我的微信公众号第一时间获取哦~
使用XMLTemplater写出XML
原文地址:https://knowledge.safe.com/articles/30940/xml-writing-with-xmltemplater.html 介绍 XML是一种结构化的文本形式,常用于开放标准和交换格式。也常出现在Web和消息传递应用程序中。将数据转换成XML格式是FME的一项重要功能。本文介绍编写XML的FME方法,并且以基本的示例帮
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
Nevow拥有很好的新特性
引用:Nevow , a python based web construction toolkit , has a lot of nice features, that deserve attention:1 - LivePage ( Ajax ).2 - Canvas ( Flash to server ).3 - XUL , the python way.4 - Stan ( Python
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
eclipse的xml文件提示templates的模板
eclipse的xml文件提示templates的模板 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <templates> <template autoinsert="true" context="xml_tag" enable...
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
MyEclipse中xml的区别xml(advanced Templates)、xml(Basic Templates)、xml schema
advanced Templates是struts插件带的新建XML向导,可以根据Struts的配置创建基于Struts的web.xml和Struts配置文件。 Basic Templates是Eclipse带的新建XML向导,可以根据任意的DTD和Schema生成XML schema是定义和限制另一个xml文件的文件。
glade工具安装及入门
glade工具安装及入门 1.glade工具安装 这个工具还是很好安装的,只需一个命令:sudo apt-get install glade libglade2-dev 2.几个重要的问题 glade图形工具还是很好操作的,基本上拉一拉,熟悉熟悉应该都会。接下来是几个比较难处理的问题 glade产生的界面还是要通过代码来实现的,保存的.glade文件要转化成.xml文件
获取xml时,出现“(十六进制值 0x1F)是无效的字符之类Xml异常的解决办法
http://hi.baidu.com/zeratul_bb/blog/item/3e2a44cf085cf33af8dc61de.html获取xml时,出现“(十六进制值 0x1F)是无效的字符之类Xml异常的解决办法2008-12-19 10:44最近做新闻采集器,需要获取很多站点的xml,加载个别站点经常出现“(十六进制值 0x1F)是无效的字符”问题,百思不
Nevow render用法(转)
_uacct = "UA-99018-3";urchinTracker();1Nevow Object Publishing2=======================34In Nevow Object Traversal, we learned about the5nevow.inevow.IResource.renderHTT
error: Error parsing XML: not well-formed (invalid token)解决办法
从另一个工程中拷贝代码到新的工程后,编译出现了error: Error parsing XML: not well-formed (invalid token)错误,刚开始不清楚怎么解决。重新拷贝编译,也还是同样的问题。后来进入到工程中对相应的.xml文件cat看了下,发现里边全部是一些二进制的信息或者乱码。 这才发现问题所在,改用ftp服务器上传的方式后问题解决。
配置codetemplates.xml
/** * ${tags} */ /** * ${tags} * @功能描述: * @Author:Kvin0829 * @date:${date} ${time} * @Version:1.1.0 */ /** * @return the ${bare_field_name} */ /** @param ${param} the ${bare_field
127



被折叠的 条评论
为什么被折叠?



