0

Trac用のプラグインを作成しようとしています。変数の内容をリクエスト(process_request)からテンプレートにエクスポートすることに成功しました...しかし、他の方法でそれを行うのにまだ問題があります:ユーザーによってテープに記録された情報をキャッチする方法は?

<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メソッドにあります!

何か案が ?ありがとう

4

1 に答える 1

1

一般的なWebとUIの相互作用について質問しています

  • my_var->入力フィールドが「file」でデフォルト値が「Thiswill..」のテンプレート
  • フィールドへのユーザー入力
  • POSTリクエストによる送信

入力の新しい値を取得(変更)する方法は正しいですか?もしそうなら、あなたはそれをかなり複雑に説明しました。

そして、 trac-hacks.orgについて知らないのなら、おそらく地球上で最も信頼できるTracプラグインコードのソースであると思います。ここで必要とされるよりもはるかに多くの実用的な例を見てください。

reg.argsとにかく、キーは次のようにdictから戻り値を読み取ることです。

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ドキュメントも参照してください。

于 2012-09-13T21:54:42.827 に答える