【问题标题】:Python renders wrong page using web.pyPython 使用 web.py 呈现错误页面
【发布时间】:2017-11-27 22:49:11
【问题描述】:

我正在尝试自学 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),并且我有可用的引导程序(尽管这与我的问题无关)。

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

当我从 urls 中删除第二个条目并从 controller.py 中删除 regnsterclick 类时,MainLayout.html 页面已加载,但似乎没有任何内容加载到 $:page 中。

任何想法为什么会显示 register.html 的内容?非常感谢任何帮助。

谢谢。

【问题讨论】:

  • 当您使用 localhost:8080 打开浏览器时,您应该会看到一个错误,因为您没有为该 URL 定义任何内容。也许您的网络服务器的“旧”版本仍在 8080 上运行?您描述的症状与您的代码不符。

标签: python pycharm web.py


【解决方案1】:

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

这个答案很好地解释了它:https://stackoverflow.com/a/46633252/2150542

【讨论】:

  • 我把大括号改成了括号,效果很好!非常感谢。
猜你喜欢
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多