Pax*_*ell 3 html python jinja2 web.py
我有一个web.py应用程序从textarea获取输入并将其输入到数据库.我可以从数据库中获取信息并将其发布到页面,但NEWLINES已经消失.在回发到HTML时,如何保留换行符?数据确实包含\r\n在内,但在HTML中不会呈现为NEWLINES.有什么想法吗?这是一个小例子:
(2, u'Title', u'content here...hey\r\nthis\r\nhas\r\nbreaks in it....?',
datetime.datetime(2012, 7, 5, 21, 5, 14, 354516))
Run Code Online (Sandbox Code Playgroud)
这是我从数据库中返回的.我需要\r\n代表一个<br />,如果有两个,<p>那就太棒了.任何方向都会非常感激.
还有一个图书馆吗?我听说过markdown和mark up但是我找不到如何从python字符串发布html数据的例子?
Bur*_*lid 11
两种主要方法.最简单的方法是将输出包装在<pre></pre>其中,将其格式化为输入.
或者,您可以使用<br />(而不是<p>)替换newlies,因为字符代表换行符而不是段落.
对于第二种选择,这是一种方法:
>>> s
'hello\nthere\r\nthis\n\ris a test'
>>> r = '<br />'
>>> s.replace('\r\n',r).replace('\n\r',r).replace('\r',r).replace('\n',r)
'hello<br />there<br />this<br />is a test'
>>>
Run Code Online (Sandbox Code Playgroud)
或者第三个选项 - 使用许多文本条目库/格式之一并通过它们呈现内容(如其他人所述 - 如markdown).
但是,如果您只想做一个简单的替换,那就太过分了.
不作为换行符呈现的换行符是html中的预期行为.你想要的是插入 <br>或解析您的输入到文本段落并包装那些<p>..</p>
我会做两者的混合:<br>用于单个换行符和<p>.. </p>用于双换行符.您可以在保存到数据库时或在将其保存时进行解析.
编辑:我为您制作了以下图片.有很多方法可以查看解析器.就个人而言,我想将它们视为一种状态机.为了实现它,您应该以流方式读取输入字符串,例如使用http://docs.python.org/library/stringio.html.
Edit2:将描述"下推自动机"更改为"状态机".下推自动机是正确的但不精确,它与图形不匹配 - 我将两者混合起来.
Edit3:这里有一些关于如何在代码中实现状态机解析器的sudo代码,使用while循环,switch case和if语句进行状态转换.
state = 'plainState'
streamer = get_stream_reader_from_input()
buffer = ''
while true {
nextchar = streamer.readchar()
if (nextchar == null) { //EOS
print(buffer)
exit
}
switch (state) {
case('plainState') {
if (nextchar == '\n') {
state = 'singleBreakState'
}
else if (nextchar == '\r') {
state = 'CRState'
}
else {
buffer += nextchar
}
}
case('singleBreakState') {
if (nextchar == '\n') {
state = 'doubleBreakState'
}
else if (nextchar == '\r') {
state = 'CRState2'
}
else {
state = 'plainState'
buffer += '<br>' + nextchar
}
}
//...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8916 次 |
| 最近记录: |