下面的代码真的很烦我,我已经看了stackoverflow和谷歌但还没有找到任何东西,我是一个非常好的pyton程序员,还没有,至今,直到现在,发现一个我无法处理的错误。我已经尝试了所有的东西,但是代码的这种平和给了我 IndentationError:意外的unindent ,这很奇怪,因为正常的错误是“不可预见的缩进”,这意味着多次发布它的间距以及我的间距所以我通过整个代码和nada相同的错误,我正确地放入四个空格,一切仍然......没有。帮助
from bottle import Bottle, run, route, static_file, debug
from mako.template import Template as temp
from mako.lookup import TemplateLookup
lookup = TemplateLookup(directories=[base+'/templates'])
application = Bottle()
if __name__ == '__main__':
@route('/')
else:
@application.route('/')
def index():
index_temp = lookup.get_template('index.html')
return index_temp.render(site=site, corperate=corperate, copyright=copyright)
答案 0 :(得分:9)
我认为您的想法是根据模块是直接运行还是导入,将不同的装饰器应用于函数。不幸的是,这不会像你拥有它那样工作,因为装饰器调用需要在它之后立即跟随函数。但是,你可以这样做:
if __name__ != '__main__':
route = application.route
@route('/')
def index():
index_temp = lookup.get_template('index.html')
return index_temp.render(site=site, corperate=corperate, copyright=copyright)
或者,假设您在某处导入application
,您可以from application import route
开始,然后您不需要任何if
语句。
答案 1 :(得分:3)
另一种可能的解决方案:
def decorate(func):
if __name__ == '__main__':
@route('/')
def f():
func()
else:
@application.route('/')
def f():
func()
return f
@decorate
def index():
index_temp = lookup.get_template('index.html')
return index_temp.render(site=site, corperate=corperate, copyright=copyright)
答案 2 :(得分:2)
syntax of the def statement不允许你尝试做什么。这样做:
def index():
index_temp = lookup.get_template('index.html')
return index_temp.render(site=site, corperate=corperate, copyright=copyright)
if __name__ == '__main__':
index = route('/')(index)
else:
index = application.route('/')(index)
答案 3 :(得分:1)
我对使用装饰器的方式感到困惑,请查看:http://www.python.org/dev/peps/pep-0318/
我很确定你使用装饰器需要与函数定义本身处于相同的缩进级别。此外,第一个装饰器(@route()
)没有跟随它的功能。
答案 4 :(得分:0)
你不能以这种方式从装饰函数中分离装饰器。
你仍然可以计算你的装饰者,然后应用它:
if condition:
deco = route('/')
else:
deco = application.route('/')
@deco
def foo(...):
答案 5 :(得分:0)
你可以做这样的事情
route_decorator = route if __name__ == '__main__' else application.route
@route_decorator('/')
def index():
index_temp = lookup.get_template('index.html')
return index_temp.render(site=site, corperate=corperate, copyright=copyright)
如果其他任何事情都不需要路线,你可以说
if __name__ != '__main__':
route = application.route
@route('/')
def index():
index_temp = lookup.get_template('index.html')
return index_temp.render(site=site, corperate=corperate, copyright=copyright)