2014-10-20 1 views
1

Я только начал использовать bottle.py. Поскольку мое приложение не развертывается как корень сайта. Я использую get_url для кода перенаправления, как это:Как получить URL-адрес динамического маршрута bottle.py?

@myapp.route("/") 
def index(): 
    redirect(myapp.get_url("/hello"), name=name) 

Например, если приложение развертывается на HTTP // www.mysite.com/CGI-BIN/myapp.py будет успешно перенаправлять на HTTP//www.mysite.com/cgi-bin/myapp.py/hello

Теперь проблема в том, как я могу перенаправить на динамический маршрут? Например

@myapp.route("/hello/<name>") 
def hello(name): 
    ..... 
    return template(...) 

@myaap.route("/") 
def index(): 
    #How to redirect it to /hello/<name>????? 

Теперь я хочу, чтобы перенаправить страницу маршрута «/ привет /», но get_url не принимает его. Он не работает с динамическим маршрутом.

Я не собираюсь писать свой собственный «my_get_url», чтобы справиться с этим. Я думаю, что все, кто развернул заявку на бутылку на сайт без полномочий root, уже столкнулись и решили проблему .....

Прокомментирован любой комментарий.

Спасибо!

+0

'перенаправлять (myapp.get_url ("/ привет% S" имя%) '?? – nu11p01n73R

ответ

0

Поскольку вы дали маршрут в

@myapp.route("/hello/<name>")

редирект оленья кожа работа, как

redirect(myapp.get_url("/hello"), name=name)

, а он должен указать весь URL как /hello/somename/

То есть если пытаясь передать значение переменной, name, как в коде, он может быть записан в виде

@myapp.route("/hello/<name>") 
def hello(name): 
    ..... 
    return template(...) 

@myaap.route("/") 
def index(): 
    redirect(myapp.get_url("/hello/") + '/' + name) 
+0

redirect (myapp.get_url ("/hello /% s "% name) не работает. Это вызовет ошибку:« Нет маршрута с этим именем ». Первый аргумент get_url выглядит как должен быть «имя маршрута». – BigBadFatRabbit

+0

попробуйте что-то вроде 'redirect (myapp.get_url («/hello/») + name)' См. отредактированный ответ – nu11p01n73R

0

Вы должны использовать как имя и маршрут, и ссылаться на маршрут по имени.

Например:

@app.get(path="/admin/customers/single/messages/system_messages/delete/<message_id:int>", 
     name="admin.customers.single.messages.system_messages.delete", 
     _run_functions_before=[ 
      user_has_permissions([UserPermissionForCustomer.super_user_access]) 
     ] 
     ) 
def delete_system_message(resources, message_id): 
    """ 
    @param resources: 
    @type resources: 
    @param message_id: 
    @type message_id: int 
    @return: 
    """ 
    system_messages_logic = SystemMessagesLogic(resources) 
    system_messages_logic.delete_system_message(message_id) 
    return list_system_messages(resources) 

В приведенном выше примере, вы можете обратиться к маршруту, как следующее:

redirect(app.get_url("admin.customers.single.messages.system_messages.delete", message_id=message_id)) 

 Смежные вопросы

  • Нет связанных вопросов^_^