ក្រុម រូបភាព ថតឯកសារ វ៉ែប
Recently Visited Groups | Help | Sign in
Google Groups Home
Efficiency of getting attribute values in templates
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  7 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Nikola Pavlović  
View profile  
 More options Jul 3 2009, 8:17 pm
From: Nikola Pavlović <n...@datasnok.org>
Date: Fri, 3 Jul 2009 15:17:17 +0200
Local: Fri, Jul 3 2009 8:17 pm
Subject: Efficiency of getting attribute values in templates
Hello people,

I'm writing my first Django application and would like to know what is
considered more efficient: getting values of models' attributes in views
or directly in templates?

More precicely, say we have a Person model with name and id attributes,
and these need to be shown on a page.

Is it better for a view to "prepare" a context like this:

# views.py
# ...

    persons = []

    for person in Person.objects.all():
        persons.append({'id': person.id, 'name': person.name})

    return render_to_response('some_template.html', persons)

# some_template.html

{% for p in persons %}
    Id: {{ p.id }}; Name: {{ p.name }}
{% endfor %}

or just pass a QuerySet in a context like this:
# views.py
# ...

    persons = Person.objects.all()
    return render_to_response('some_template.html', persons)

and then let the template access attribute values directly?

Does it make a difference in terms of performance?

--
Alex Haley was adopted!


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Rajesh D  
View profile  
 More options Jul 3 2009, 11:04 pm
From: Rajesh D <rajesh.dha...@gmail.com>
Date: Fri, 3 Jul 2009 09:04:37 -0700 (PDT)
Local: Fri, Jul 3 2009 11:04 pm
Subject: Re: Efficiency of getting attribute values in templates

On Jul 3, 9:17 am, Nikola Pavlović <n...@datasnok.org> wrote:

The second method avoids an extra loop and also keeps your code leaner
(less code == lesser chances of bugs). It's also the more commonly
used method. And if you are displaying just a handful of persons per
page, the performance differences should be negligible either way. If
you have a lot of persons in that query set, you will want to use some
kind of pagination anyway.

-RD


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
TechnicalBard  
View profile  
 More options Jul 5 2009, 5:30 am
From: TechnicalBard <rodwe...@gmail.com>
Date: Sat, 4 Jul 2009 15:30:48 -0700 (PDT)
Local: Sun, Jul 5 2009 5:30 am
Subject: Re: Efficiency of getting attribute values in templates
Is there a way to pass an object to the template and have the template
handle all of the attributes without hardcoding them into the
template?

On Jul 3, 10:04 am, Rajesh D <rajesh.dha...@gmail.com> wrote:


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Rajesh D  
View profile  
 More options Jul 5 2009, 6:32 am
From: Rajesh D <rajesh.dha...@gmail.com>
Date: Sat, 4 Jul 2009 16:32:00 -0700 (PDT)
Subject: Re: Efficiency of getting attribute values in templates

On Jul 4, 6:30 pm, TechnicalBard <rodwe...@gmail.com> wrote:

> Is there a way to pass an object to the template and have the template
> handle all of the attributes without hardcoding them into the
> template?

Depends on what you mean by "handle". The template won't by itself
know the markup with which you want to wrap your object's various
attributes.

-RD


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
TechnicalBard  
View profile  
 More options Jul 5 2009, 8:28 am
From: TechnicalBard <rodwe...@gmail.com>
Date: Sat, 4 Jul 2009 18:28:35 -0700 (PDT)
Local: Sun, Jul 5 2009 8:28 am
Subject: Re: Efficiency of getting attribute values in templates
But the admin app does - it defines the labels from the attribute
names and just puts them all in a table or list.

How does one do that?  Analogous to iterating through a list of
objects, is it possible to iterate through the attributes of a single
object?

On Jul 4, 5:32 pm, Rajesh D <rajesh.dha...@gmail.com> wrote:


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Rajesh D  
View profile  
 More options Jul 5 2009, 9:56 pm
From: Rajesh D <rajesh.dha...@gmail.com>
Date: Sun, 5 Jul 2009 07:56:41 -0700 (PDT)
Local: Sun, Jul 5 2009 9:56 pm
Subject: Re: Efficiency of getting attribute values in templates

On Jul 4, 9:28 pm, TechnicalBard <rodwe...@gmail.com> wrote:

> But the admin app does - it defines the labels from the attribute
> names and just puts them all in a table or list.

> How does one do that?

Actually, you tell it which fields you want to display through the
list_display attribute on your Admin class.

  Analogous to iterating through a list of

> objects, is it possible to iterate through the attributes of a single
> object?

The _meta object of a model instance has a method that can give you
all the field names:

your_model_instance._meta.get_all_field_names()

There are several other methods and properties like this available on
the _meta[1] object (for example, get_field(), .fields,..) Once you
learn what they do, you will be able to deduce the field names you
need and then call getattr(your_model_instance, field_name) on them.
You will probably also want to distinguish between local fields and
related fields such as foreign keys and m2m fields. You can't do much
of this in the template. You will have to do all this introspection in
your view and then pass on suitable context variables to your template
which can be fairly generic.

Martin Alchin's book Pro Django[2] is a must-read if you want to dive
into this kinda of stuff.

[1] http://code.djangoproject.com/browser/django/trunk/django/db/models/o...
[2] http://www.amazon.com/Pro-Django-Experts-Voice-Development/dp/1430210478

-RD


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nikola Pavlović  
View profile  
 More options Jul 7 2009, 9:22 pm
From: Nikola Pavlović <n...@datasnok.org>
Date: Tue, 7 Jul 2009 16:22:58 +0200
Local: Tues, Jul 7 2009 9:22 pm
Subject: Re: Efficiency of getting attribute values in templates

Great, that was just what I wanted to know -- a 'Django best practices'
kind of question.

After a couple of hours of playing with this the other day, I came to
the same ("obvious") conclusion (much simpler code), but I was just
concerned if there was some significant overhead to accesing attributes
in the rendering phase.

Thanks!

--
Two can Live as Cheaply as One for Half as Long.
                -- Howard Kandel


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2010 Google