The choices for the form are specified in your model. Django
uses these
choices for it's form-display.
It would make sense to me if Django would also provide an
easy way for
you to display such 'nice' values in your interface.
The set of choices that you provide is accessible via the
model; if you
model is named 'photoalbum' and your set of choices is
named
'SCORE_CHOICES' then you can access it:
>>> from django.models import photoalbum
>>> print photoalbum.SCORE_CHOICES
My guess is that the best way to do it is to write a custom
filter for
your display, which you pass as parameter the set of choices
import as
shown above (or something like that, perhaps just the name
of it will
do).
Your filter-function can then contain all the intelligence
to map the
actual value to the 'nice' value from the model choices.
Other options are available too; like converting the 'tuple
of tuples'
that the SCORE_CHOICES is to a dict via a list-comprehension
and adding
that to your template-context; then you can use the
template-syntax to
construct a dictionary-lookup in your template. Although
that might not
work either, give the constraints of the Django template
syntax...
Anyways I hope that I gave you some useful hints to get to
the desired
result and since I will soon need to solve this problem too
it was
useful for me to think about it!
Regards,
--Tim
-----Original Message-----
From: django-users googlegroups.com
[mailto:django-users googlegroups.com] On Behalf Of Malcolm
Tredinnick
Sent: maandag 13 februari 2006 10:00
To: Django users
Subject: Re: How to find the label for a value
PythonistL wrote:
> Luke,
> Thanks for your reply.But I am not sure I fully
understand your reply.
> (I might have put my question in a not clear way).
> All that I need is to render the user's choice so that
in a template
> there is no value but the label.
>
> E.g. the new_data( taken from a form ) may be like
this:
> {'Password1': ['bb'], 'Fax': [''], 'Drop-Down
Menu': ['2'], 'Login2':
> ['exp hotmail.com'],}
>
> where Drop-Down Menu loks like this
>
> <p><select name="Drop-Down Menu"
size="1">
> > <option value="1">Choice
1</option>
> > <option
value="2">Choice2</option>
> > </select></p>
>
> and I need to put in a template "Choice2"
not "2".
If the only place that "Choice2" appears is in
your template, then the
only way to get hold of it inside Django is by not
specifying a "value"
attribute on the "option" element. This is
standard HTML (which was
what look was trying to say): you do not get access to the
contents of
an option element _unless_ there is no value attribute
specified (in
which case the default initial value for the element is its
content --
see section 17.6 of the HTML spec).
So either you need to keep track of the association between
the value
"2" and the text string "Choice2" in
your code as well as your template
(violates 'don't repeat yourself') or you can pass back
"choice2" as
part of your form (rather than "2") or you can
build up the template
dynamically, inserting both "2" and
"Choice2" as part of a list (so you
only store the association between the two in one place --
your code,
not the template).
Best wishes,
Malcolm
|