2012-09-13 67 views
0

我正在嘗試爲Trac寫一個插件。 我已經成功地將我的請求(process_request) 中的變量內容導出到我的模板中,但是我仍然遇到問題:如何捕獲用戶錄製的信息?從基於Genshi模板的窗體獲取用戶條目

<form name="input" action="" method="POST"> 
    Configuration : <input type="text" name="configuration" value ="$my_var" /> <br /><br /> 

    <label for="file">URL:</label> 
    <input type="text" name="file" id="WillPosted" value="This text will be changed by the user"/>  

    <input type="submit" name="SubmiT" value="Browse" /><br /><br /> 

因此,如何能趕上我用id = 「WillPosted」 輸入表單的內容? 注意:實際的問題出在Trac!的IRequestHandler方法!

任何想法? 感謝

回答

1

你問的是常用的Web UI交互

  • my_var - >與輸入字段「文件」和默認值「這將..」
  • 用戶輸入字段模板
  • 提交由POST請求

如何獲得(改變)新輸入的值,對不對?如果是這樣,你解釋它相當複雜。

我想知道,如果你不知道trac-hacks.org,可能是地球上最權威的Trac插件代碼的源代碼 - 這裏有更多可用的示例來看看比這裏需要的更多。

無論如何,關鍵是從字典reg.args讀的返回值(一個或多個),像這樣:

from pkg_resources import resource_filename 
from trac.web.chrome import ITemplateProvider, add_stylesheet 


implements(IRequestHandler, ITemplateProvider) 

# IRequestHandler methods 

def match_request(self, req): 
    # Any condition evaluating to True will fire the second method. 
    return req.path_info == '/<your_path>' 

def process_request(self, req): 
    "Demo how to interact with your template." 

    # Check, if you'r really processing the right request by target matching, 
    # and only act on input of authorized users - as an added suggestion/option. 
    if req.path_info.startswith('/<your_path>') and req.authname != 'anonymous': 
     # Check for request type. 
     if req.method == 'POST': 
      # Ok, go pock for the new value now. 
      value = req.args.get('file', 'default_value'))) 
      # Now go, process it, store it, even redirect away, if you're done. 

      # Fallback for Trac 0.11 compatibility included. 
      referer = req.args.get('referer') or req.get_header('Referer') 

      # Steer clear of requests going nowhere or loop to self 
      if referer is None or \ 
        referer.startswith(str(req.abs_href()) + '/<your_path>'): 
       referer = req.abs_href() 
      req.redirect(referer) 

    # Still there, so that's the initial call or anonymous user, hey? 
    # So let's prepare information for displaying the template ... 
    data = dict(my_var='any_string_or_number') 

    # Take the env obj from self, if needed. 
    env = self.env 
    mod = MyOwnSecondaryModule(env) 
    if mod.can_do_something: 
     data['my_var'] = mod.do('better') 
    # Why not apply an own style? 
    add_stylesheet(req, 'your_plugin/most_famous_style.css') 

    return 'your_template.html', data 

# ITemplateProvider methods 

def get_htdocs_dirs(self): 
    """Return the absolute path of a directory containing additional 
    static resources (such as images, style sheets, etc). 
    """ 
    return [('your_plugin', resource_filename('your_plugin_pkg_base_dir', 'htdocs'))] 

def get_templates_dirs(self): 
    """Return the absolute path of the directory containing the provided 
    Genshi templates. 
    """ 
    return [resource_filename('your_plugin_pkg_base_dir', 'templates')] 

問題上使用各種Trac的擴展點接口?請參閱權威wiki文檔on the subject

+0

老兄,這正是我需要的! value = req.args.get('file','default_value') 我知道trac-hacks.org ...但我迷失了那裏誠實 這是我的第一個插件...非常感謝! – cyberbrain