Я просматривал документацию CherryPy, но не могу понять, что я хочу делать. Я подозреваю, что это могло бы быть больше Python вещи, чем CherryPy вещь ...Динамическое создание определений страниц в Cherrypy
Мой текущий класс выглядит примерно так:
import managerUtils
class WebManager:
def A(self, **kwds):
return managerUtils.runAction("A", kwds)
A.enabled = True
def B(self, **kwds):
return managerUtils.runAction("B", kwds)
B.enabled = True
def C(self, **kwds):
return managerUtils.runAction("C", kwds)
C.enabled = True
Очевидно, что есть много повторов здесь.
в managerUtils.py, у меня есть Dict что-то вроде:
actions = {'A': functionToRunForA,
'B': functionToRunForB,
'C': functionToRunForC}
Хорошо, так что это немного упрощенное представление о нем, но я уверен, что вы получите идею.
Я хочу быть в состоянии сделать что-то вроде:
import managerUtils
class WebManager:
def __init__(self):
for action in managerUtils.actions:
f = registerFunction(action)
f.enabled = True
Любые идеи о том, как это сделать?
Один ответ предложил делать:
class WebManager:
def index(self, action, **kwds):
return managerUtils.runAction(action, kwds)
index.enabled = True
Это поднимает, я считаю:
http://webserver/?action&kwds
Вместо того, что я хочу, что:
http://webserver/action?kwds
Когда я делаю то, что вы предлагаете, я получаю следующую ошибку 404:
Traceback (most recent call last):
File "/Library/Python/2.5/site-packages/cherrypy/_cprequest.py", line 606, in respond
cherrypy.response.body = self.handler()
File "/Library/Python/2.5/site-packages/cherrypy/_cperror.py", line 227, in __call__
raise self
NotFound: (404, "The path '/myAction' was not found.")
Я думаю, что отображение URL-адресов с «действием» в их путях в качестве примера путается (тем более, что имя аргумента в предлагаемом решении также называется действием.) В верхней части вопроса были «A», B 'и' C '. Поэтому примеры должны были использовать один из них. Например: 'http: // webserver /? B & kwds' и' http: // webserver/B? Kwds'. – nmgeek