« 医療制度 | Main | Trac 0.11 rc1 -> Trac0.11.1へのアップデート »

2008.09.23

Trac Plugin - IRequestFilter

 IRequestFilterを用いると、既存のリクエストをフックして処理を割り込ませることが可能となります(例:BatchModifyPluginにおけるチケット一括更新処理)。

 シンプルな例としては、


def pre_process_request(self, req, handler):
    if req.method=='GET' and req.args.get('HogeParam'):
        self._hoge(req)
    return handler

のような感じでしょうか。

 GETリクエストにおいて、リクエストパラメータ中にHogeParamというキーが存在した場合、自身のクラス(プラグイン)の_hoge関数を呼び出すことができます。

 ちなみに、GETリクエストの場合、ctrl+Rなどでブラウザリロードが行われて再度処理が実行されてしまうのを防ぐため、リダイレクトを行うという方法もあります。その場合、if文の処理の最後で、

req.redirect(req.href.ticket(req.args.roadmap()))

のような感じで記述すればOK。

#Javaと違って、requestオブジェクトでそのままredirectさせるんですね・・・。

(2008/09/28追記)

from trac.web.chrome import add_script, add_stylesheet
でadd_script/add_stylesheetを読み込んでおくと、post_process_request(self, req, template, data, content_type):内で
add_script(req, 'hoge/hoge.js')
add_stylesheet(req, 'hoge/hoge.css')

って感じで基本となるhtmlファイルに対してJavaScriptやCSSのロードを(元となるテンプレートファイルを修正することなく)追加することができるようです。

|

« 医療制度 | Main | Trac 0.11 rc1 -> Trac0.11.1へのアップデート »

Subversion・Trac・etc.」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/42547683

Listed below are links to weblogs that reference Trac Plugin - IRequestFilter:

« 医療制度 | Main | Trac 0.11 rc1 -> Trac0.11.1へのアップデート »