【问题标题】:Pass arguments between Webapp2 redirects在 Webapp2 重定向之间传递参数
【发布时间】:2017-06-20 08:27:50
【问题描述】:

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

我的端点如下所示:

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

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

试图用

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

但是抛出了一个错误:

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

【问题讨论】:

    标签: python google-app-engine webapp2


    【解决方案1】:

    您不能仅使用 RedirectRoute 来做到这一点;您需要从某个地方获取 slug 值。

    您需要编写标准路由,并在处理程序中从数据存储区获取对象并使用 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)
    

    【讨论】:

    • 感谢丹尼尔的回答。只是为了确保我们处于同一级别,当我使用完整打印 URL(需要 slug 的那个)时,我从数据存储比较 slug 中获取对象,然后使用 slug 重定向到完整路径,就像你提到的那样。我想要实现的是将没有 slug 的“短”网址重定向到“完整”网址,在请求之间传递“ID”,然后将从数据存储中提取缺少的 slug,并且将重定向用户。所以用户尝试访问:/invoices/1/print 被重定向到/invoices/1//print,丢失的 slug 将在处理程序级别处理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多