我已经回顾了这里有关此问题的所有问题,回顾了瓶子教程,回顾了瓶子谷歌小组讨论,据我所知,我做的一切都是正确的。但不知何故,我无法正确加载 CSS 文件。我在静态文件上收到 404,http://localhost:8888/todo/static/style.css未找到,根据下面的目录结构,不应该是这种情况。我使用的是 Bottle 0.11 版本(不稳定);我有什么遗漏的吗,或者这是 Bottle 中的一个错误?
我的目录结构:
todo/
todo.py
static/
style.css
Run Code Online (Sandbox Code Playgroud)
我的待办事项.py:
import sqlite3
from bottle import Bottle, route, run, debug, template, request, validate, static_file, error, SimpleTemplate
# only needed when you run Bottle on mod_wsgi
from bottle import default_app
app = Bottle()
default_app.push(app)
appPath = '/Applications/MAMP/htdocs/todo/'
@app.route('/todo')
def todo_list():
conn = sqlite3.connect(appPath + 'todo.db')
c = conn.cursor()
c.execute("SELECT id, task FROM todo WHERE status LIKE '1';")
result = c.fetchall()
c.close()
output = template(appPath + 'make_table', rows=result, get_url=app.get_url)
return output
@route('/static/:filename#.*#', name='css')
def server_static(filename):
return static_file(filename, root='./static')
Run Code Online (Sandbox Code Playgroud)
我的HTML:
%#template to generate a HTML table from a list of tuples (or list of lists, or tuple of tuples or ...)
<head>
<link href="{{ get_url('css', filename='style.css') }}" type="text/css" rel="stylesheet" />
</head>
<p>The open items are as follows:</p>
<table border="1">
%for row in rows:
<tr style="margin:15px;">
%i = 0
%for col in row:
%if i == 0:
<td>{{col}}</td>
%else:
<td>{{col}}</td>
%end
%i = i + 1
%end
<td><a href="/todo/edit/{{row[0]}}">Edit</a></td>
</tr>
%end
</table>
Run Code Online (Sandbox Code Playgroud)
我不太明白你的部署。该/Applications/MAMP/htdocs/路径以及app.run代码中缺少的路径表明您正在 Apache 下运行它。是生产部署吗?对于开发任务,您应该使用 Bottle 的内置开发服务器,您知道。app.run()在你的末尾添加一个单曲todo.py,就完成了。
现在,如果您使用 Apache,最可能的根本原因是这一行:static_file(filename, root='./static')。todo.py使用 mod_wsgi,不能保证工作目录与您所在的目录相同。事实上,几乎永远不会。
您正在对数据库和模板使用绝对路径,对静态文件也这样做:
@route('/static/:filename#.*#', name='css')
def server_static(filename):
return static_file(filename, root=os.path.join(appPath, 'static'))
Run Code Online (Sandbox Code Playgroud)
接下来,我不明白你的应用程序安装在哪里。URLhttp://localhost:8888/todo/static/style.css表明安装点是/todo,但处理程序的路由todo_list又是/todo。完整路径应该是吗http://localhost/todo/todo?您的应用程序有/处理程序吗?
我还建议避免对路径进行硬编码并将路径片段连接在一起。这会更干净:
from os.path import join, dirname
...
appPath = dirname(__file__)
@app.route('/todo')
def todo_list():
conn = sqlite3.connect(join(appPath, 'todo.db'))
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4838 次 |
| 最近记录: |