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>
</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 页面已加载但似乎没有加载任何内容进入 $:page.
知道为什么要显示 register.html 的内容吗?非常感谢任何帮助。
谢谢。
通过用大括号定义 urls
,您使其成为无序的 set
。您需要将 urls
定义为 tuple
,这可以使用括号来完成。
这个答案解释得很好:
我正在努力自学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>
</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 页面已加载但似乎没有加载任何内容进入 $:page.
知道为什么要显示 register.html 的内容吗?非常感谢任何帮助。
谢谢。
通过用大括号定义 urls
,您使其成为无序的 set
。您需要将 urls
定义为 tuple
,这可以使用括号来完成。
这个答案解释得很好: