I answer you directly, i can't right to the mailinglist
Le mardi 02 octobre 2007 � 17:32 -0700, Tim Black a �crit :
> I'm trying to get a link (an HTML anchor tag) to display as the
> contents of a cell in a ToscaWidgets DataGrid widget, and came across
> the email discussion on the topic from a year ago, and have attempted
> to implement its recommendations.
>
> On Sep 26 2006, 6:06 pm, Alberto Valverde <[EMAIL PROTECTED]> wrote:
> > You can define a function to process a field and return any
> > ElementTree instance you feel like. For example:
> >
> > from elementtree import ElementTree as ET
# I use python 2.5 but u must have "tostring" in ElementTree
from xml.etree.ElementTree import tostring
> >
> > def makeLink(obj):
> > link= ET.Element('a', href=obj.url)
> > link.text = obj.title
> > returnlink
here use : return tostring(link)
> >
> > Then when you define the grid's fields just place it there:
> >
> > fields = [
> > ('Date created', 'date_created'),
> > ('Title', makeLink),
> > ....
> > ]
> >
> > Your grid will have links with the object's title pointing to the
> > object's url.
>
> I've got most of the above-recommended setup working, but instead of a
> link being displayed I get:
>
> <Element a at 21816d0>
>
> How can I get the Element instance to render? The code I'm using is
> below.
>
> def makeProjectLink(self, row): # row is a tuple whose first
> element is a model.Project instance
> if row[0] != 'Totals':
> link = Element('a', href='/project/%s' % row[0].id)
> link.text = row[0].name
> return link
> else: return row[0]
>
> @expose(template="projects.templates.projects_grid")
> def projects_grid(self):
> '''Displays list of projects in a grid'''
> # TODO: Modify the projects template so it can use a grid
> projectList = []
> # Calculate totals for all projects
> hours = '%.1f' %
> sum([(work.finish-work.start).seconds/(60*60.0) for work in
> model.WorkDone.select()])
> nonBidReceivable = 0.0
> for project in
> model.Project.select(model.Project.q.bidAmount==0.00):
> nonBidReceivable += self.getNonBidReceivable(project)
> bidReceivable = float(sum([project.bidAmount for project in
> model.Project.select(model.Project.q.bidAmount>0.0)]))
> receivable = nonBidReceivable+bidReceivable
> paid = float(sum([payment.amount for payment in
> model.ClientPayment.select()]))
> balance = receivable-paid
> contractorsPayable = sum([bill.amount for bill in
> model.ContractorBill.select()])
> contractorsPaid = sum([payment.amount for payment in
> model.ContractorPayment.select()])
> contractorBalance = contractorsPayable-contractorsPaid
> purchases = sum([item.cost for item in
> model.ItemPurchased.select()])
> estimatedProfit =
> float(receivable)-float(contractorsPayable)-float(purchases)
> currentProfit =
> float(paid)-float(contractorsPaid)-float(purchases)
> projectList.append(('Totals',hours,'$%.2f' %
> receivable,'$%.2f' % paid,
> '$%.2f' % balance,'$%.2f' %
> contractorsPayable,
> '$%.2f' % contractorsPaid,'$%.2f' %
> contractorBalance,
> '$%.2f' % purchases,'$%.2f' %
> estimatedProfit,
> '$%.2f' % currentProfit))
> # Calculate totals by project
> projects=model.Project.select(orderBy=model.Project.q.name)
> for project in projects:
> hours = '%.1f' %
> sum([(work.finish-work.start).seconds/(60*60.0) for work in
> project.workDone])
> nonBidReceivable = self.getNonBidReceivable(project)
> bidReceivable = project.bidAmount
> receivable = nonBidReceivable+float(bidReceivable)
> paid = float(sum([payment.amount for payment in
> project.clientPayments]))
> balance = receivable-paid
> contractorsPayable = sum([bill.amount for bill in
> project.contractorBills])
> contractorsPaid = sum([payment.amount for payment in
> project.contractorPayments])
> contractorBalance = contractorsPayable-contractorsPaid
> purchases = sum([item.cost for item in
> project.itemsPurchased])
> estimatedProfit =
> float(receivable)-float(contractorsPayable)-float(purchases)
> currentProfit =
> float(paid)-float(contractorsPaid)-float(purchases)
> # display('text', name)
> projectList.append((project,
> hours,'$%.2f' % receivable,'$%.2f' %
> paid,
> '$%.2f' % balance,'$%.2f' %
> contractorsPayable,
> '$%.2f' % contractorsPaid,'$%.2f' %
> contractorBalance,
> '$%.2f' % purchases,'$%.2f' %
> estimatedProfit,
> '$%.2f' % currentProfit))
> # Construct DataGrid
> DataGrid = tw.widgets.forms.DataGrid
> Column = tw.widgets.forms.datagrid.Column
> projectGrid = DataGrid(fields=[ ('Project',
> self.makeProjectLink),
> ('Hours', lambda row: row[1]),
> ('Receivable', lambda row:
> row[2]),
> ("Rec'd", lambda row: row[3]),
> ('Bal. due', lambda row:
> row[4]),
> ("Cont's payable", lambda row:
> row[5]),
> ("Cont's paid", lambda row:
> row[6]),
> ("Cont's due", lambda row:
> row[7]),
> ('Purchases', lambda row:
> row[8]),
> ('Est. Profit', lambda row:
> row[9]),
> ('Curr. Profit', lambda row:
> row[10])
> ],
> default = projectList)
> return dict(projectGrid=projectGrid)
>
> The template contains just the following:
>
> ${projectGrid.display()}
>
> Tim Black
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---