在 Webapp2 重定向之间传递参数

Pass arguments between Webapp2 redirects

我想在 urls.py 级别将 URL 无 slug 重定向到有 slug 的。

我的端点如下所示:

(r'/invoices/<:(-?\d+)>/print/', PrintHandler, 'ShortPrintHandler')
(r'/invoices/<:(-?\d+)>/<:([\w-]*)>/print/', PrintHandler, 'FullPrintHandler')

有什么方法可以让我在重定向时首先传递 decimal 从短 URL 到长的参数?在没有 slug 的情况下生成 URLs 已经在处理程序级别进行了介绍。

尝试用

处理
RedirectRoute(r'/invoices/<:(-?\d+)>/print/', PrintHandler, redirect_to_name='FullPrintHandler')

但是抛出了一个错误:

KeyError: 'Missing argument "1" to build URI.'

仅使用 RedirectRoute 是做不到的;您需要从某处获取 slug 值。

您需要编写一个标准路由,并且在处理程序中您应该从数据存储中获取对象并return使用 slug 重定向到完整路径。

类似于(未测试):

class RedirectToFullPath(webapp2.RequestHandler):
    def get(self, invoice_id):
        invoice = Invoice.get_by_id(invoice_id)
        self.redirect_to('FullPrintHandler', invoice_id, invoice.slug)