Tuesday, August 4, 2015

Re: Passing parameters / attributes to javascript in a template

On Tuesday, 4 August 2015 17:32:11 UTC+1, Alex Heyden wrote:
I don't quite follow what you're doing with set_first_call_true and set_first_call_false. Are you using that to control the for loop behavior?

If you are, take a look at https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#for. Django's template language has that built in.

If you're pushing to an array like in your initial example, you don't need to handle commas at all. Here's an example out of Chrome's dev tools:

> var a = []
> a.push('foo')
> a.push('bar')
> a
< ["foo", "bar"]

If you want to define it in one go, try something more like:

<script type="text/javascript">
    my_markers = [
    {% for current_addr in mymodel.addresses.all %}
        {
            lat: {{ current_addr.lat }},
            lon: {{ current_addr.lon }},
            description: {{ current_addr.description | safe }}
        }{% if not forloop.last %}, {% endif %}
    {% endfor %}
    ];
</script>


An even better solution is to keep this logic where it belongs, in the view, and use the accepted format for interchange of data with Javascript, which is JSON.

    my_markers = [{'lat': addr.lat, 'lon': addr.lon, 'description': addr.description} for addr in mymodel.addresses.all]
    return render(request, 'template.html', {'my_markers': json.dumps(my_markers)})

and refer to it directly in the template:

    <script type="text/javascript">
         my_markers = {{ my_markers|safe }}
    </script>

-- 
DR.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/4c82b618-008e-450f-9f64-5267ec795795%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment