On Fri, Jun 10, 2011 at 7:48 AM, jay K. <[email protected]> wrote:
>
> Hello,
>
> I am not a django developer, but I have a background on html, css,
> javascript, jquery and php.
>
> I was wondering if you can help me with a question regarding django,
> since I'm working on a website built on django (which was not started
> by me)
>
> I want to store a django object into a javascript array. So far I have
> this code:
>
> In my template file:
>
> <script type="text/javascript" language="javascript" charset="utf-8">
>
> var map_schools = {{ city.school_set.all }};
>
> </script>
>
> Unfortunately the django object is not stored as desired, but instead
> it gets stored like the following:
>
> var map_schools = [<School: Oxford, Eckersley>]
>
>
[<School: Oxford, Eckersley>] is the printable representation of your query
set (what you get when you call city.school_set.all()) -- what you need to
do is build up a JavaScript literal that you can insert into the code. There
are two fairly simple ways of doing this:
1. Use a loop in the template:
var map_schools = [{% for school in city.school_set.all %}"{{
school|escapejs }}"{% if not forloop.last %},{% endif %}{% endfor %}];
You'll notice a couple of things there:
- there is a "for" loop there, to iterate over all of the schools in the
result set
- the quotes are present in the template, to make sure that the school
names are strings in the JavaScript
- there is a test after every string to see if a "," is needed as a
separator (some javascript implementations are not very forgiving if you put
a comma after the last element)
- Every school name is passed through the "escapejs" filter, to avoid
breaking out of the string.
2. Construct a JSON string in python:
In your view, do something like this:
from django.utils.simplejson import dumps
...
school_list = dumps([school.name for school in city.school_set.all()])
and then add school_list to the context variables that are passed to the
template. Then in the template, you can just use {{ school_list }}, and it
will be a properly formatted JavaScript array.
--
Regards,
Ian Clelland
<[email protected]>
--
You received this message because you are subscribed to the Google Groups
"Django users" 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/django-users?hl=en.