`
touchmm
  • 浏览: 1037728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Genshi笔记(续)

阅读更多

前文见《Genshi笔记》。

这一年多来做了几个小的WEB应用,都是用的Genshi,总体感觉还不错,不过真要系统地写点什么,貌似也写不出来,只能做点笔记了。

一、输出XHTML:

Genshi默认是输出HTML的,作XHTML校验时不能通过,但Genshi是支持输出为XHTML的。

在TurboGears里的设置是在 app.cfg 配置文件里:

tg.defaultview = "genshi"
genshi.default_doctype = 'xhtml-transitional'
genshi.outputformat = 'xhtml'

主要是后面两行的参数设置指定Genshi输出XHTML。

类似的在Pylons里设置也差不多,不过是在 environment.py 文件里:

    # Customize templating options via this variable
tmpl_options = config['buffet.template_options']
tmpl_options['genshi.default_doctype'] = 'xhtml-transitional'
tmpl_options['genshi.default_format'] = 'xhtml'

同样是两个参数的设置。

二、输出XML内容:

在一个应用中需要输出RSS,本来是用 RSS2Gen 库生成静态文件的,但是有些情况还是动态输出为好,于是就用Genshi做了一个。

以TurboGears为例,在 controllers.py 用一个 @expose 函数输出数据:

    @expose(template="myproj.templates.rssfeed",content_type='text/xml; charset=utf-8')
def rssfeed(self, *args, **kw):
data = ...
return dict(data=data)

然后创建一个模板文件 rssfeed.html :

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:py="http://genshi.edgewall.org/">
<channel>
<title>Mental Studio</title>
<link>http://mental.we8log.com</link>
<description>mental studio</description>
<language>zh_CN</language>
<managingEditor>raptor.zh@gmail.com</managingEditor>
<copyright>Copyright 2008</copyright>
<generator>TurboGears 1.0.3.2</generator>
<pubDate>2008-09-23</pubDate>
<ttl>60</ttl>
<item py:for="item in data">
<title>${item.title}</title>
<link>${item.url}</link>
<comments>${item.url}</comments>
<description><span style="margin-left: 30px;margin-top: 0px;margin-bottom: 0px;"><b>${item.user}</b> ${item.created} </span>
<p style="margin-left: 30px;margin-top: 2px;margin-bottom: 0px;font-style: italic;">${item.content}</p> </description>
<guid>${item.url}</guid>
<pubDate>${item.created}</pubDate>
</item>
</channel>
</rss>

关键的就是两点:一个是expose的参数,必须指定为输出XML及所用的编码方式;另一个是模板文件要是一个XML的模板,而不是继承来的HTML模板。

三、将HTML数据原样输出(不渲染):

因 为expose会把返回值dict中所有字符串类型的值都作一次渲染——比如把"<"、">"转成"&lt;", "&gt;",这样的话如果想在最终页面里显示插入的HTML内容就不行了,在某些应用中就会有很大的局限。还好Genshi有提供相应的解决方 案。在Q&A里提供了三种解决方案,但是都说得不太清楚,可能是他们觉得这太简单了——当然,我试了其中一个方法,的确非常简单:

    @expose(template="myproj.templates.article")
def showarticle(self,id=None,**kw):
c=self.getArticleContent(id)
cm=Markup(c)
return dict(c=cm)

重点就是那个Markup(),用于将字符串转为Markup对象,这样就能绕过Genshi的render。模板那边则不需要任何改变,同样是用标准的输出方式:

<div id="ArticleContent" py:content="c" />

就这么简单。

分享到:
评论

相关推荐

    搭建Genshi的运行环境和编译环境

    Genshi的核心功能包括解析、生成和操作这些标记语言,以便将动态数据与静态布局结合,最终呈现给客户端。本文将详细介绍如何搭建Genshi的运行环境和编译环境。 首先,确保你已经安装了Python。Genshi是基于Python的...

    Genshi-0.7.tar.gz

    Genshi是一个强大的Python库,主要用于生成Web内容。在标题"Genshi-0.7.tar.gz"中,我们可以看到这是Genshi的一个版本0.7的压缩包文件,格式为tar.gz,这是一种常见的Linux和Unix系统中用于打包和压缩文件的格式。...

    Genshi-0.4.4.win32.exe

    Genshi-0.4.4.win32.exe

    Genshi-0.7

    Genshi-0.7

    Genshi-BASIC:Genshi BASIC的翻译; 创建BASIC的简单方言以学习制作编程语言的基础

    Genshi BASIC的翻译; 创建BASIC的一种简单方言以学习制作编程语言的基础。 尽管为自定义BASIC方言编写解释器几乎没有用,但我学到的相同的词法分析和解释基础也可以应用于其他语言。 我最初是在2019年编写此书的...

    python-genshi-0.7-3.el7.x86_64.rpm

    离线安装包,亲测可用

    Python库 | fresco-genshi-0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:fresco-genshi-0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Genshi-0.7-cp27-none-win32

    Genshi-0.7-cp27-none-win32

    Genshi-0.8.dev0-py3-none-any

    Genshi-0.8.dev0-py3-none-any

    Genshi-0.7-cp27-none-win_amd64

    Genshi-0.7-cp27-none-win_amd64

    Genshi-0.5.1.tar.gz_5 to 1_parser text_pdf_pdf parser java_pdf t

    标题中的"Genshi-0.5.1.tar.gz"是一个软件包,名为Genshi的版本0.5.1,其被压缩成tar.gz格式。这种格式是Linux和Unix环境中常用的压缩方式,由tar工具进行文件打包,再通过gzip工具进行压缩。在描述中提到的“PDF ...

    Genshi-0.8.dev0-py3-none-any.whl

    Genshi-0.8.dev0-py3-none-any.whl

    Genshi-0.8.dev0-cp27-none-win32

    Genshi-0.8.dev0-cp27-none-win32

    Genshi-0.8.dev0-cp27-none-win_amd64

    Genshi-0.8.dev0-cp27-none-win_amd64

    Genshi-0.7-cp27-none-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl...

    Genshi-0.8.dev0-py3-none-any.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl...

    Genshi-0.7-cp27-none-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl...

    Genshi-0.8.dev0-cp27-none-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl...

    Trac+SVN+Apache安装笔记

    首先,确保你已经准备好所有必要的软件包,包括Apache、SVN、TortoiseSVN、Python、Genshi、SVN-Python绑定、pysqlite、ez_setup.py、mod_python以及Apache22Passwd工具。 **步骤1:安装Apache服务器** 安装Apache...

    Genshi-0.8.dev0-cp27-none-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl...

Global site tag (gtag.js) - Google Analytics