2017-06-20 104 views
1

我想重新定向没有弹出的URL,使用slug,在urls.py级别。Webapp2重定向之间传递参数

我的端点如下所示:

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

有什么办法,我可以通过第一,decimal,从短的URL参数长一个,对重定向?生成URL没有slug已在处理程序级别覆盖。

试图与

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

来处理它,但被抛出了一个错误:

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

回答

4

你不能做到这一点,只需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) 
+0

感谢丹尼尔的回答。只是为了确保我们处于同一级别, 当我使用完整打印URL(需要填充块的URL)时,我从数据存储比较段落中获得对象,然后使用段落重定向到完整路径,就像您提到的那样。 我想要达到的目的是在没有弹药的情况下将'short'url重定向到'full',并在请求之间传递'ID',然后丢失从数据存储库中弹出的slug,用户将被重定向。 所以用户试图访问: '/发票/ 1/print' 被重定向到 '/发票/ 1 // print' 和失踪塞将在处理器级别 – Pythonist

+0

处理见我更新的例子。 –