1

I was looking at the code from this site, for a basic google app engine calculator. I am just as inexperienced with GAE as I am with HTML, so when I saw the code bellow I was a little confused. Mostly with the last line </html>""" % (result, buttons)). What is the % for and how does it relate result and buttons to the html code?

        result = ""
        try:
            result = f[operator](x, y)
        except ValueError:
            result = "Error: Incorrect Number"
        except ZeroDivisionError:
            result = "Error: Division by zero"
        except KeyError:
            pass
        # build HTML response
        buttons = "".join(["<input type='submit' name='operator' value='"
                           + o + "'>" for o in sorted(f.keys())])
        self.response.out.write("""<html>
            <body>
            <form action='/' method='get' autocomplete='off'> 
            <input type='text' name='x' value='%s'/><br/>
            <input type='text' name='y'/><br/> 
            %s 
            </form>
            </body>
            </html>""" % (result, buttons))
4

1 回答 1

3

用于在%Python 中格式化字符串。在Dive Into Python中查看很好的解释。在您的示例中,它们用于将 '%s' 字符替换为变量中的值。

修改您的示例:

您的示例的修改版本,硬编码result和的值buttons

result = "THIS IS MY RESULT"
buttons = "AND MY BUTTON"
output = """
<html>
    <body>
        <form action='/' method='get' autocomplete='off'> 
            <input type='text' name='x' value='%s'/><br/>
            <input type='text' name='y'/><br/> 
            %s 
        </form>
    </body>
</html>
""" % (result, buttons)

print output

会产生:

<html>
    <body>
        <form action='/' method='get' autocomplete='off'> 
            <input type='text' name='x' value='THIS IS MY RESULT'/><br/>
            <input type='text' name='y'/><br/> 
            AND MY BUTTON 
        </form>
    </body>
</html>

在您的示例中,按钮包含更多 Html,并且格式字符串在值实际更改的上下文中更有意义,但上述内容应说明基本原理。

一个更简单的例子:

下面的代码:

result = "THIS IS MY RESULT"
buttons = "AND MY BUTTON"
print "%s ... %s!" % (result, buttons)

会产生:

THIS IS MY RESULT ... AND MY BUTTON!

它与 App Engine 的关系:

上面的两个例子都说print:这会将输出打印到“stdout”——你的控制台。

在您的原始示例中,它表示self.response.out.write,这是您告诉 App Engine 将文本(即 Html)写入浏览器的方式。

具体来说,如果你改变:

result = "THIS IS MY RESULT"
buttons = "AND MY BUTTON"
print "%s ... %s!" % (result, buttons)

至:

result = "THIS IS MY RESULT"
buttons = "AND MY BUTTON"
self.response.out.write("%s ... %s!" % (result, buttons))

当您访问页面而不是控制台时,文本将出现在您的浏览器中。

参考:

Dive Into Python,上面也链接是学习 Python 的一个很好的资源。如果您是 Python 新手,整本书都很好。和Udacity的课程一样。

关于格式字符串的Python 文档是专门针对格式字符串的一个很好的参考。

“使用 Google App Engine”一书是同时学习 Python、Html 和 App Engine 的绝佳资源。我可以诚实地推荐它,我自己读过它。它非常容易获得,但它现在已经有几年历史了。

玩得开心!

于 2013-05-16T22:26:20.900 回答