tags:

views:

343

answers:

1

I want to print out a dictionary, sorted by the key. Sorting the keys is easy in the view, by just putting the keys in a list and then sorting the list. How can I loop through the keys in the template and then get the value from the dictionary.

{% for company in companies %}
    {% for employee, dependents in company_dict.company.items %}
    {% endfor %}
{% endfor %}

(Just made up the example...) The part that doesn't work is the "company_dict.company.items" part. I need the "company" to be the value of company. Right now the company prat is looking for a key named "company" not the value of "company" from the loop above.

I'm doing a bit of processing to put the dictionary of dictionaries together. Changing the layout of the data isn't really an option. I figure the right approach is to write up a template tag, just wanted to know if there was a built-in way I missed.

A: 

try this: http://www.bhphp.com/blog4.php/2009/08/17/django-templates-and-dictionaries

a custom template filter will do the trick.

from django import template
register = template.Library()

def dict_get(value, arg):
    #custom template tag used like so:
    #{{dictionary|dict_get:var}}
    #where dictionary is duh a dictionary and var is a variable representing
    #one of it's keys

    return value[arg]

register.filter('dict_get',dict_get)

more on custom template filters: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howto-custom-template-tags

in your example you'd do:

{% for employee, dependents in company_dict|company %}
Brandon H
Thanks a lot! I had to modify what you did a bit. My filter returns "value[arg].iteritems()" and the template looks like so: {% for employee, dependents in company_dict|get_dict_and_iter:company %}
hey whatever works. most people using this site could modify what i did to their circumstance as well.
Brandon H