gpt4 book ai didi

python - 找不到 Bottle 应用程序中的静态文件 (404)

转载 作者:行者123 更新时间:2023-11-28 23:01:37 27 4
gpt4 key购买 nike

我已经复习了这里关于此的所有问题,复习了 bottle 教程,复习了 bottle google group discussions,AFAIK,我做的一切都是对的。但是,不知何故,我无法正确加载我的 CSS 文件。我在静态文件上收到 404,找不到 http://localhost:8888/todo/static/style.css,根据下面的目录结构,不应该案子。我正在使用 Bottle 的 0.11 版(不稳定);有没有我遗漏的东西,或者这是 Bottle 中的错误?

我的目录结构:

todo/
todo.py
static/
style.css

我的 todo.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')

我的 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>

最佳答案

我不太了解您的部署。 /Applications/MAMP/htdocs/ 路径以及代码中缺少 app.run 表明您正在 Apache 下运行它。它是生产部署吗?对于开发任务,你应该使用 Bottle 的内置开发服务器,你知道的。在 todo.py 的末尾添加一个 app.run(),您就完成了。

现在,如果您使用的是 Apache,最有可能的根本原因是这一行:static_file(filename, root='./static')。使用 mod_wsgi,您不能保证工作目录等于放置 todo.py 的目录。事实上,它几乎永远不会。

您正在为数据库和模板使用绝对路径,对静态文件也这样做:

@route('/static/:filename#.*#', name='css')
def server_static(filename):
return static_file(filename, root=os.path.join(appPath, 'static'))

接下来,我不明白你的应用程序安装在哪里。 URL http://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'))
...

关于python - 找不到 Bottle 应用程序中的静态文件 (404),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10885429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com