2015-10-02 3 views
0

У меня есть большое количество имен, которые должны ссылаться на URL-адрес, соответствующий их именам. Я знаю, что я мог бы сделать это, создав функцию для каждого элемента в списке и украсив ее @cherrypy.expose. Интересно, однако, если можно связать элементы вместо функции function без открытия одного и того же сайта для каждого элемента. (? Что-то вроде создания соответствующей функции на лету, с лямбда-функции, и передавая соответствующий аргумент)Cherrypy выставляет несколько элементов этой функции

import cherrypy 

class Test(object): 

    @cherrypy.expose 
    def index(self): 
    html1 = '''<html> 
      <head></head> 
      <body> 
      <ul style="list-style: none;">''' 
    html2 = """</ul> 
      </body> 
      </html>""" 
    html3 = "" 
    for name in names: 
     html3 += "<li><a href='%s'>%s</a></li>" %(name.lower(), name) 
    return html1 + html3 + html2 

    @cherrypy.expose 
    def function(self, name=''): 
    print(name) 
    return name 

ответ

0

Вы можете использовать специальный метод default:

import cherrypy as cp 

class App: 

    @cp.expose 
    def index(self): 
     return "This is the index" 

    @cp.expose 
    def default(self, name): 
     return "Default with name: %s" % name 

    @cp.expose 
    def branch(self): 
     return "Specific branch" 

cp.quickstart(App()) 

Вы можете попробовать URLs : /,/branch,/ANY_OTHER_NAME. Он может быть определен даже в более общий термин с определением метода, как это:

@cp.expose 
def default(self, *args, **kwargs): 
    return "Default with args: %s and kwargs: %s" % (args, kwargs) 

Таким образом, вы можете принять почти ничего. Он отобразит части url в список args и строку запроса в kwargs.