Amaranth
Amaranth

Reputation: 2491

Loop in dictionary in HTML

I have a Python script creating a dictionary and passing it to a html page to generate a report.

in Python:

data_query= {}
data_query["service1"] = "value1"
data_query["service2"] = "value2"
return data_query

in HTML:

% for name, count in data_query:
<tr>
<td>${name}</td>
<td>${count}</td>
</tr>
% endfor

it does not work, says that it does not return enough values.

I also tried (pointed out in a comment in the other question, that I deleted by mistake):

% for name, count in dict.iteritems():

It does not give any error, but does not work. Displays nothing.

${len(dict)}

gives the right dictionary length

${len(dict.iteritems())}

does not display anything and seem to have a weird effect on my table format.

Is there a way to iterate correctly a dictionart in HTMl to display both the key and value?

EDIT: How I transfer the dictionary to the html page.

from mako.lookup import TemplateLookup
from mako.runtime import Context
from mako.exceptions import text_error_template

html_lookup = TemplateLookup(directories=[os.path.join(self.dir_name)])
html_template = html_lookup.get_template('/templates/report.html')
html_data = { 'data_queries' : data_queries }
html_ctx = Context(html_file, **html_data)
try:
    html_template.render_context(html_ctx)
except:
    print text_error_template().render(full=False)
    html_file.close()
    return
html_file.close()

Upvotes: 1

Views: 11158

Answers (1)

Joran Beasley
Joran Beasley

Reputation: 114038

% for name, count in dict.items:
<tr>
<td>${name}</td>
<td>${count}</td>
</tr>
% endfor

should probably work ... typically you dont call the fn when you pass it to a templating language... alternatively

% for name in dict:
<tr>
<td>${name}</td>
<td>${dict[name]}</td>
</tr>
% endfor

would likely also work

as an aside ... dict is a terrible variable name as it shadows the builtin dict (which might be part of your problem if that is actually your variable name)

Upvotes: 3

Related Questions