简单的Python HTML 输出

1、问题背景

一名初学者在尝试将 Python 脚本输出到网页上时遇到了一些问题。他当前使用 Python 和 HTML 进行开发,并且遇到了以下问题:

  • 担心自己的代码过于复杂,尤其是 WebOutput() 函数。
  • 希望通过 JavaScript 使用 HTML 模板文件更新数据。
  • 不确定在什么情况下框架对应用程序是合适的。

2、解决方案

  • 优化 WebOutput() 函数,使其更加简洁和高效,并替换繁琐的代码为内联字符串。
  • 使用渲染模板引擎(例如 Mako)将 WebOutput() 函数改写为模板,以便在将来更容易地更改脚本的输出。
  • 修改搜索结果函数,使其返回结果列表而不是修改全局变量。
  • 使用 CherryPy 等 Web 框架将数据发送到浏览器,而不是不断地写入文件。
  • 使用模板系统(例如 Django)来生成输出,以避免 Python 代码和 HTML 代码的紧耦合。

代码例子:

python 复制代码
import simplejson, urllib, time, cherrypy

#query, results per page 
query = "swineflu"
rpp = 25
jsonURL = "http://search.twitter.com/search.json?q=" + query + "&rpp=" + str(rpp)

# iterate over search results
def SearchResults():
    jsonResults = simplejson.load(urllib.urlopen(jsonURL))
    data = []
    for tweet in jsonResults["results"]:
        try:
            # terminal output
            feed = tweet["from_user"] + " | " + tweet["text"]
            print(feed)
            data.append(feed)
        except:
            print("exception??")
    return data

# writes latest tweets to file/web
def WriteHTML(data):
    f = open("outw.html", "w")
    f.write("<html>\n")
    f.write("<title>python newb's twitter search</title>\n")
    f.write("<head><meta http-equiv='refresh' content='60'></head>\n")
    f.write("<body>\n")
    f.write("<h1 style='font-size:150%'>Python Newb's Twitter Search</h1>")
    f.write("<h2 style='font-size:125%'>Searching Twitter for: " + query + "</h2>\n")
    f.write("<h2 style='font-size:125%'>" + time.ctime() + " (updates every 60 seconds)</h2>\n")

    for i in range(1,rpp):
        try:
            f.write("<p style='font-size:90%'>" + data[-i] + "</p>\n")
        except:
            continue

    f.write("</body>\n")
    f.write("</html>\n")
    f.close()

while True:
    print("")
    print("\nSearching Twitter for: " + query + " | current date/time is: " + time.ctime())
    print("")
    data = SearchResults()
    WriteHTML(data)
    time.sleep(60)


class TwitterSearcher(object):
    def index(self):
        data = SearchResults()
        html = """<html>
        <head>
        <meta http-equiv='refresh' content='60'>
        <title>python newb's twitter search</title>
        </head>
        <body>
            <h1 style='font-size:150%%'>Python Newb's Twitter Search</h1>
            <h2 style='font-size:125%%'>Searching Twitter for: %(query)s</h2>
            <h2 style='font-size:125%%'> %(ctime)s (updates every 60 seconds)</h2>
        %(results_html)s
        </body>
        </html>
        """ % {
            'query': query,
            'ctime': time.ctime(),
            'results_html': "".join(["<p style='font-size:90%%'>%s</p>\n" % (result) for result in data])
        }
        return html
    index.exposed = True

cherrypy.quickstart(TwitterSearcher())

这个改进后的示例使用了模板系统来生成 HTML,并使用了 CherryPy 框架发送结果到浏览器。

相关推荐
猫头虎31 分钟前
如何查看局域网内IP冲突问题?如何查看局域网IP环绕问题?arp -a命令如何使用?
网络·python·网络协议·tcp/ip·开源·pandas·pip
沿着路走到底39 分钟前
python 基础
开发语言·python
无尽夏_1 小时前
HTML5(前端基础)
前端·html·html5
沐知全栈开发2 小时前
C# 委托(Delegate)
开发语言
任子菲阳2 小时前
学Java第三十四天-----抽象类和抽象方法
java·开发语言
烛阴2 小时前
武装你的Python“工具箱”:盘点10个你必须熟练掌握的核心方法
前端·python
csbysj20203 小时前
如何使用 XML Schema
开发语言
R6bandito_3 小时前
STM32中printf的重定向详解
开发语言·经验分享·stm32·单片机·嵌入式硬件·mcu
earthzhang20213 小时前
【1007】计算(a+b)×c的值
c语言·开发语言·数据结构·算法·青少年编程
杨枝甘露小码3 小时前
Python学习之基础篇
开发语言·python