使用预标签格式化HTML代码的解决方法?

时间:2014-06-08 00:15:22

标签: python html

我正在使用用于编写HTML页面的Python脚本。它使用一系列开关来确定写入的页面。它还为代码示例使用<pre>标记。我不喜欢关于<pre>标签的事情是它弄乱了.py脚本中的格式。 if / elif / else条件的层次结构被破坏,因为标签现在是左对齐的。我知道<pre>标签考虑了空格,但是无论如何要在Python脚本中格式化字段,以便代码更清晰,更好地格式化?

所以现在就是这样

def main():
    if true:
        page=<b>This is a sample</b>
<pre>
This is now left justified to match the pre tag but looks ugly in the code
</pre>
    else:
       page="<b>This would look much better</b>
       <pre>
            But all the white spacing to keep it aligned makes the HTML page 
            formatted wrong but it is much easier to read, edit here in the script
       </pre>
    return page

2 个答案:

答案 0 :(得分:0)

将字符串移动到全局变量,甚至可以在单独的模块中移动:

sample_page = '''\
<b>This is a sample</b>
<pre>
This is now left justified to match the pre tag but looks ugly in the code
</pre>
'''

better_sample = '''\
<b>This would look much better</b>
<pre>
    But all the white spacing to keep it aligned makes the HTML page 
    formatted wrong but it is much easier to read, edit here in the script
</pre>
'''

请注意这些完全是否缩进。

然后在常规流程中使用这些:

if True:
    page = sample_page
else:
    page = better_sample

您可以轻松地将其与string formatting结合使用;字符串变量中的占位符,使用str.format()在正常流程中填充这些占位符。

更好的解决方案仍然是使用模板引擎来生成HTML输出,例如ChameleonJinjaGenshi

答案 1 :(得分:0)

效率不高,但我会像这样连接字符串:

def main():
    if True:
        page = "<b>This is a sample</b>\n"
        page += "<pre>\nThis is now left justified...\n</pre>"
    else:
        page = "<b>...</b>"
        page += "..."

&#34; \ n&#34;字符将被解释为换行符。在这种情况下,第一个示例中的 This 将是左对齐的。只需根据需要添加空格。

如果您想让这个过程更有效率,可以使用StringIO,如下所示:

import StringIO


def main():
    text = None
    if True:
        page = StringIO.StringIO()
        page.write("<b>Testing</b>\n")
        page.write("<pre>\nThis is left justified.\n</pre>")
    else:
        pass

    text = page.getvalue()
    page.close()
    return text


if __name__ == '__main__':
    print main()

注意#1 :不需要标记之外的换行符,因为HTML并不关心空格。如果您正在阅读来源,那主要是为了可读性。

注意#2 :我不会在任何类型的生产环境中使用它,但它适用于简单的事情。