Tornado/Python self.render("example.html") 忽略CSS
我对Python和编程还很陌生。 我使用一个叫Tornado的网络服务器来“托管”我的网站。每当我用self.render("example.html", 这里是变量)来生成动态的html页面时,生成的html页面却没有包含CSS,也就是说,它只是生成了一个没有任何样式的html页面,尽管我已经把.css文件和example.html页面放在同一个“Tornado/template”文件夹里。我很确定我在html中链接css的方式是正确的。
如果我直接用浏览器打开example.html,而不是通过Tornado打开,它就会正常显示.css文件的样式。
因为我不知道为什么会这样,所以我把我的代码都贴在这里: 这是Tornado中的app.py:
import config
import os.path
import re
import MySQLdb
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("question3.html")
class StopTornado(tornado.web.RequestHandler):
def get(self):
tornado.ioloop.IOLoop.instance().stop()
class ReturnQuery(tornado.web.RequestHandler):
def post(self):
connection = MySQLdb.connect(**config.mysql_config)
cursor = connection.cursor()
if 'lowermass' in self.request.arguments and 'uppermass' in self.request.arguments:
lowermass = self.get_argument('lowermass')
uppermass = self.get_argument('uppermass')
# Testing for bad input and should block Injection attacks
# Since you can't really do an injection attack with only numbers
# Placing any non-int input will throw an exception and kick you to the Error.html page
try:
lowermass = int(lowermass)
uppermass = int(uppermass)
except ValueError:
self.render("Error.html")
if lowermass < uppermass:
cursor.execute ('''SET @row_num=0;''')
cursor.execute('''SELECT @row_num:=@row_num+1 as 'Num', b.commonname
FROM Bird b
JOIN Bodymass m ON b.EOLid = m.EOLid
WHERE m.mass BETWEEN %s AND %s
GROUP BY b.commonname''',(lowermass, uppermass))
birds = cursor.fetchall()
self.render("question2.html", birds = birds)
else:
self.render("Error.html")
else :
self.render("Error.html")
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", MainHandler),
# Add more paths here
(r"/KillTornado/", StopTornado),
(r"/tables/", ReturnQuery),
(r"/tables/localhost8888", MainHandler)
]
settings = {
"debug": True,
"template_path": os.path.join(config.base_dir, "templates"),
"static_path": os.path.join(config.base_dir, "static")
}
tornado.web.Application.__init__(self, handlers, **settings)
if __name__ == "__main__":
app = Application()
app.listen(config.port)
print "Starting tornado server on port %d" % (config.port)
tornado.ioloop.IOLoop.instance().start()
这是我想要渲染的html页面:
基本上,我从一个网页用户那里接收两个整数输入,然后在上面的app.py中对数据库执行一个mysql查询。它返回一个结果列表(我觉得是一个列表的列表),我用这些数据来填充下面html页面中的一个表格,但就是这个包含表格的html页面没有用css样式渲染。
lowermass和uppermass是用户输入的值(必须是整数)。question3.html是用来获取用户输入的html页面,而question2.html是包含表格的html页面。
我真心希望这只是一个我能快速解决的简单错误。
<html>
<head>
<link rel = "stylesheet" type ="text/css" href = "presnt.css">
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
<script>
$(document).ready(function(){
$('#table').dataTable();
});
</script>
<title>Birds with body mass in range</title>
<div id = "header">
Birds with body mass in range
</div>
<br>
</head>
<body>
<table id = "table">
<thead>
<tr>
<td style="padding:4px;border-top:1px solid black;">rownum</td>
<td style="padding:4px;border-top:1px solid black;">common name</td>
</tr>
<tr>
<td style = "padding:1px;border-top:1px solid black;">
</td>
<td style = "padding:1px;border-top:1px solid black;">
</td>
</tr>
</thead>
<tbody>
{% if birds %}
{% for bird in birds %}
<tr>
<td>{{ bird[0] }} </td>
<td>{{ bird[1] }}</td>
</tr>
{% end %}
{% else %}
<tr>
<td colspan = 2> No results returned</td>
</tr>
{% end %}
</tbody>
</table>
</body>
1 个回答
3
它只是生成了一个没有任何样式的HTML页面,虽然我把我的.css文件和example.html页面放在了同一个“Tornado/template”文件夹里。我很确定我把HTML和CSS的链接写对了。
CSS文件应该放在你在这里声明的静态文件夹里:
"static_path": os.path.join(config.base_dir, "static")
这是如何在模板中链接它的方法:
<link rel="stylesheet" href="{{ static_url("presnt.css") }}">