我正在使用Python Bottle中的python应用程序.如果我使用像/ dashboard或/ rules或/ page这样的1个lvl深度URL,该应用程序可以正常工作.但是,如果我更深入地像/ dashboard/overview或/ rules/ruleone或/ page/test那样,CSS,JS,字体和图像将会失败.:(
HTML源代码仍然指向/ assets /但如果我在/ rules/ruleone之类的URL上,正确的路径应该是../assets或./assets吗?path/assets /仅适用于第一级,但不适用于更深层的lvls,换句话说:bottle不会将静态文件路径调整到当前目录.我该如何解决?
我好几天都坚持这个问题,我真的希望有人可以帮助我.:(
我的代码(简化):
#!/usr/bin/env python
import lib.bottle as bottle
from lib.bottle import route, template, debug, static_file, TEMPLATE_PATH, error, auth_basic, get, post, request, response, run, view, redirect, SimpleTemplate, HTTPError, abort
import os, sys, re
@route('/dashboard')
@view('secure_page')
def show__page_dashboard():
return dict(page = 'Dashboard')
@route('/rules/<rule>')
@view('secure_page')
def show_page_rules_more(rule):
return dict(page = rule)
@route('/assets/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root='/var/myapp/assets')
TEMPLATE_PATH.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "view")))
bottle.debug(True)
from lib.bottledaemon import daemon_run
if __name__ == "__main__":
daemon_run()
Run Code Online (Sandbox Code Playgroud)
所以我的应用程序以守护进程模式运行.结构是:
LIB
资产
视图
server.py
我希望有人可以帮助我解决这个问题,先谢谢你们,我爱你们!<3
好吧,我找到了解决问题的方法.Bottle提供了一个URL标记,用于动态构建URL.
from bottle import url
@route('/dashboard')
@view('secure_page')
def show__page_dashboard():
return dict(page='Dashboard', url=url)
@route('/assets/<filepath:path>', name='assets')
def server_static(filepath):
return static_file(filepath, root='/var/myapp/assets')
Run Code Online (Sandbox Code Playgroud)
这就是我加载CSS/JS /图像的方法
<link href="{{ url('assets', filepath='css/style.css') }}" rel="stylesheet" type="text/css"/>
Run Code Online (Sandbox Code Playgroud)
动态菜单URL(例如在导航中)以这种方式完成:
{{ url('/dashboard') }}
Run Code Online (Sandbox Code Playgroud)
我希望这些信息可以帮助那些和我一样陷入困境的人.
在v0.12和v0.13dev上测试过