【问题标题】:How do I write custom renderers with web.py如何使用 web.py 编写自定义渲染器
【发布时间】:2018-01-21 17:21:46
【问题描述】:

作为 python 和 web.py 的新手,我不确定我想要的是否可行,但我正在尝试为我的模板分配唯一的渲染器,以便我的模板不能使用特定的文件结构。

所以我有: 代码.py

Main = web.template.render('templates/', globals=common_globals)
Section1 = web.template.render('templates/Section1/', globals=common_globals)

以后在引用这些时,

这行得通:

class index:
def GET(self):
    vPage = '0'
    vLevel = '0'
    vSection = '0'
    return Main.Layout(vPage, vLevel, vSection)

但这不是:

class Section1:
def GET(self):
    vPage = '0'
    vLevel = '1'
    vSection = '1'
    return Section1.Layout(vPage, vLevel, vSection)

任何关于这是否可能或如何工作的建议都会很可爱。

【问题讨论】:

  • 你试过了吗?它应该可以正常工作(我在“页面”不同的地方使用不同的渲染器:一种用于渲染网页,一种用于渲染 HTML 以进行 PDF 转换,一种用于渲染 HTML 用于电子邮件。这样我可以为每个人提供相同的参数,但生成不同的 HTML 请注意,渲染器的目录结构与 Web URL 的目录结构无关。
  • @pbuck 它似乎对我不起作用,但我想我找到了几个例子说它应该。从技术上讲,它可以像我希望它作为网站一样工作:令人沮丧的是,像这样直观的东西似乎不起作用。
  • templates/ 和 templates/Section1/ 目录下都有一个名为“Layout.html”的文件?
  • 是的,这个测试站点的目的是模仿一个现有站点,该站点的结构中每个“级别”都有自己的布局,即使只是为了潜在的控制。
  • 猜我不明白什么不起作用!

标签: python templates render web.py


【解决方案1】:

我发现我的问题中没有答案。

我认为问题出在 Layout.html 中,除了全零之外的任何东西都不起作用,因为变量默认为零。

当这是一个问题时,不确定确切的版本是什么,但 Layout.html 的工作版本正在使用类似的东西:

$def with (vPage, vLevel, vDivision)
$:getNavigationHeader()

Universal.py 有

def getNavigationHeader():
    vResult = ''
    
    vResult += '<h4>'
    vResult += 'Navigation'
    vResult += '</h4>'
    
    return vResult

所有方法都有相似的模式。

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多