Python 使用 web.py 呈现错误页面

Python renders wrong page using web.py

我正在努力自学Python。我的 controller.py 文件中有以下代码:

import web

urls = {
    '/', 'home',
    '/register', 'registerclick'
}

render = web.template.render("views/templates", base="MainLayout")
app = web.application(urls, globals())

# Classes/Routes

class home:
    def GET(self):
        return render.home()

class registerclick:
    def GET(self):
        return render.register()

if __name__ == "__main__":
    app.run()

这是我的代码 MainLayout.html:

$def with (page)

$var css: static/css/bootstrap.css
$var js1: static/js/jquery-3.1.0.min.js static/js/bootstrap.js         static/js/material.min.js static/js/ripple.min.js static/js/scripty.js

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CodeWizard</title>

    $if self.css:
        $for style in self.css.split():
            <link rel="stylesheet" href="$style" />

</head>

<body>
    <div id="app">
        <div class="navbar navbar-info navbar-fixed-top">
            <div class="navbar-header">
                <a class="navbar-brand">CodeWizard</a>
            </div>
            <ul class="nav navbar-nav">
                <li>
                    <a class="waves-effect" href="/">Home Feed<div class="ripple-container"></div></a>
                </li>
                <li>
                    <a href="/discover">Discover<div class="ripple-container"></div></a>
                </li>
                <li>
                    <a href="/profile">Profile<div class="ripple-container"></div></a>
                </li>
                <li>
                    <a href="/settings">Settings<div class="ripple-container"></div></a>
                </li>
            </ul>
            <div class="pull-right">
                <a href="/register" class="btn btn-raised btn-default waves-effect">Register</a>&nbsp;&nbsp;
            </div>
        </div>
        <br /><br />
        $:page
    </div>

    $if self.js1:
        $for script in self.js1.split():
            <script src="$script"></script>

</body>
</html>

我还有 2 个附加文件(home.html 和 register.html)并且我有 bootstrap 可用(尽管这与我的问题无关)。

当我启动应用程序并打开浏览器并输入 localhost:8080 作为 url 时,MainLayout.html 被加载到浏览器中(这是我所期望的)但是 register.html 被加载到 $:page 中,我不知道为什么。

当我从 url 中删除第二个条目并从 controller.py 中删除 regnsterclick class 时,MainLayout.html 页面已加载但似乎没有加载任何内容进入 $:p​​age.

知道为什么要显示 register.html 的内容吗?非常感谢任何帮助。

谢谢。

通过用大括号定义 urls,您使其成为无序的 set。您需要将 urls 定义为 tuple,这可以使用括号来完成。

这个答案解释得很好: