2017-06-20 99 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

處理見我更新的例子。 –