[Tutor] suggestion on improving script
Norman Khine
norman at khine.net
Sat Mar 22 12:31:09 CET 2008
Hello,
Please excuse me in advance if this post is long winded. I have the
following nagging issue for which I have found a work around, but wanted
a better solution.
I am using jQuery to populate tabs with some data, such as news and jobs
posts, as can be seen at http://uk.expert.travel
In my application, I have the following structure (only partially listed):
$ tree -L 2
.
|-- expert_travel.py
|-- ui
| `-- ui.tabs.js
...
`-- utils.py
#expert_travel.py
from utils import t1, t2, t3, t4
...
####################################################################
# News - List
####################################################################
def list_news(self, context):
namespace = {}
namespace['batch'] = ''
#Search the catalogue, list all news items in company
...
# Set batch informations
[t1] batch_start = int(context.get_form_value('t1', default=0))
batch_size = 5
batch_total = len(news_items)
batch_fin = batch_start + batch_size
if batch_fin > batch_total:
batch_fin = batch_total
news_items = news_items[batch_start:batch_fin]
# Namespace
if news_items:
msgs = (u'There is one news item.',
u'There are ${n} news items.')
[t1] news_batch = t1(context.uri, batch_start, batch_size,
batch_total, msgs=msgs)
msg = None
else:
news_batch = None
msg = u'Currently there is no news.'
####################################################################
# List jobs
list_jobs__label__ = u'List jobs'
list_jobs__access__ = True
def list_jobs(self, context):
...
# Set batch informations
[t2] batch_start = int(context.get_form_value('t2', default=0))
batch_size = 5
batch_total = len(jobs)
batch_fin = batch_start + batch_size
if batch_fin > batch_total:
batch_fin = batch_total
jobs = jobs[batch_start:batch_fin]
# Namespace
if jobs:
msgs = (u'There is one job.',
u'There are ${n} jobs.')
[t2] job_batch = t2(context.uri, batch_start, batch_size,
batch_total, msgs=msgs)
msg = None
else:
job_table = None
job_batch = None
msg = u'Sorry but there are no jobs'
...
####
#utils.py
def t1(uri, start, size, total, gettext=Handler.gettext,
msgs=(u"There is 1 object.", u"There are ${n} objects.")):
# Plural forms
if total == 1:
msg1 = gettext(msgs[0])
else:
msg1 = gettext(msgs[1])
msg1 = Template(msg1).substitute(n=total)
msg1 = msg1.encode('utf-8')
# Calculate end
end = min(start + size, total)
# Previous
previous = None
if start > 0:
previous = max(start - size, 0)
previous = str(previous)
[t1] previous = uri.replace(t1=previous)
previous = str(previous)
previous = XMLAttribute.encode(previous)
previous = '<a href="%s" title="%s"><<</a>' \
% (previous, gettext(u'Previous'))
# Next
next = None
if end < total:
next = str(end)
[t1] next = uri.replace(t1=next)
next = str(next)
next = XMLAttribute.encode(next)
next = '<a href="%s" title="%s">>></a>' \
% (next, gettext(u'Next'))
# Output
if previous is None and next is None:
msg = msg1
else:
# View more
if previous is None:
link = next
elif next is None:
link = previous
else:
link = '%s %s' % (previous, next)
msg2 = gettext(u"View from ${start} to ${end} (${link}):")
msg2 = Template(msg2)
msg2 = msg2.substitute(start=(start+1), end=end, link=link)
msg2 = msg2.encode('utf-8')
msg = '%s %s' % (msg1, msg2)
# Wrap around a paragraph
return Parser('<p class="batchcontrol">%s</p>' % msg, namespaces)
#Second TAB
def t2(uri, start, size, total, gettext=Handler.gettext,
msgs=(u"There is 1 object.", u"There are ${n} objects.")):
# Plural forms
...
###
I would like to alter this batch control so that I don't have to create
a new method everytime I need a new tab.
For example, I would like to change t1, t2 ... t[n] depending on the tab
I am at.
You can see it in action at http://uk.expert.travel/;view
If you click on the [Jobs] tab, there are 6 jobs, if you then click on
the 'There are 6 jobs. View from 1 to 5 (>>):'
you will get a list of the last post.
Note the URI http://uk.expert.travel/;view?t2=5
If I only use one global method, the problem would be that when I
clicked on the News tab, I will get no items displayed as can be seen here:
http://uk.expert.travel/companies/abakuc/;view
I hope this makes sense ;)
Any advice would be much appreciated.
Cheers
Norman
More information about the Tutor
mailing list