0


trac 用のプラグインを作成しようとしていますが、 sthg がありません。サイトtracによって作成されたすべてのチュートリアルを読んだ後。したがって、POST メソッドを使用してファイルをサーバーにアップロードしようとしています。これは簡単な例です。

<form id="MyForm" name="input" action="" method="post">
<label for="attachment">URL :</label>           
<input type="file" name="GanttFile" value=""/>
</form>

今、私はアップロードされたファイルを処理しようとしています、それを読んで、それを保存するよりもいくつかの変更を行うか、ユーザーにファイルを保存する場所を選択するように依頼します (trac データベースからいくつかのデータをエクスポートします)...私はまだブロックされていますこのレベルで:

def process_request(self, req):
    data = {}
    if req.method=='POST':
        file=req.args.get('GanttFile', 'value')
        # and now I'm blocked !! how can I modify this file 
        # and then redirect or save it !    

変数ファイルの内容を表示しようとすると、すべてのパスではなくファイルの名前を取得するだけですか? このようなことをすることによって:

<input type="text" name="file" value ="$myfile" /> 

そして私のソースコードで:

def process_request(self, req):
    data = {}
    if req.method=='POST':
        file=req.args.get('GanttFile', 'value')
        # display the content 
        data.update({
            'myfile': file
        })

アイデアやアイデアはありますか?
ありがとう

4

2 に答える 2

0

追加file = os.path.basename(file)すると、パスがファイル名だけにトリミングされ、IE バージョンが Firefox バージョンのように動作するようになります (Firefox バージョンは影響を受けないはずです)。

実行しようとしている操作の例については、Trac の を参照してくださいweb_ui.py。具体的には、PluginAdminPanelクラスの_do_installメソッドのコードを見てください。.eggこれは、管理者の Web UI を介してファイルをアップロードして新しいプラグインをインストールするときに使用されるコードです。

于 2012-09-18T17:40:24.080 に答える
0

私には解決策があります:
The Python Class :

class ProjectPlugin(Component):
implements(INavigationContributor, IRequestHandler, ITemplateProvider)

# INavigationContributor methods
def get_active_navigation_item(self, req):
    return 'helloworldv2linkIdentifier'

def get_navigation_items(self, req):
    yield ('mainnav', 'helloworldv2linkIdentifier',
           tag.a('Gantt Export', href=req.href.myapppp()))


# IRequestHandler methods
def match_request(self, req):
    return re.match(r'/myapppp(?:_trac)?(?:/.*)?$', req.path_info)

def process_request(self, req):
# add the implements and chek the imports ! and the indents

    data = {}
    if req.method=='POST':
        if 'DispFile' in req.args:
            myFile=req.args.get('Fily','value')
            data.update({
                'myFile': myFile
            })
            dummy=req.args.get('Fily','value').filename
            data.update({
                    'dummy': dummy
                })
            # file  reading
            mystream = myFile.file.read()


    # This tuple is for Genshi (template_name, data, content_type)
    # Without data the trac layout will not appear.
    return 'GanttTemplate.html', data, None

# ITemplateProvider methods
# Used to add the plugin's templates and htdocs
def get_templates_dirs(self):
    from pkg_resources import resource_filename
    return [resource_filename(__name__, 'templates')]

def get_htdocs_dirs(self):
    return []

これは、この場合の GanttTemplate.html ファイルの html コードです。

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:py="http://genshi.edgewall.org/"
  xmlns:xi="http://www.w3.org/2001/XInclude">
 <xi:include href="layout.html" />

<head>
 <title>Gant Export Tool</title>
</head>

<body> 


<form id="GanttForm1" name="inputForm2" action="" method="POST"     enctype="multipart/form-data">       
    <fieldset id="operations" >
        <legend >
            Configuration
        </legend>

        <label for="Fily">URL :</label>           
        <input type="file" name="Fily" value=""/><br /><br />
        Dummy variable = $dummy            <br/>
        <input type="submit" name="DispFile" value="Display the file"/><br /><br />
    </fieldset>
</form>
<br /><br /><br /><br /><br />

ありがとう !

于 2012-09-19T12:51:03.590 に答える