我有一个解决方案:
Python 类:
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 />
谢谢 !