2009-07-15 7 views

Répondre

21
<form> 
    {% for field in form %} 
      {{ field.label }}: {{ field.value }} 
    {% endfor %} 
</form> 

Jetez un coup d'oeil ici Form fields et Working with forms

+0

Merci - je l'avais vu .label mais pas .initial. Curieusement, .initial n'est même pas mentionné dans le document "Travailler avec des formulaires". – ine

+0

.initial ne fonctionne que la première fois que le formulaire est présenté, non? Par exemple, s'il y a des erreurs et que vous présentez à nouveau le formulaire, il n'y aura pas d'initiale dans mon expérience. – dfrankow

+0

Dans la terminologie Django, cela ne fonctionne qu'avec des formes non liées. Que faire si vous voulez que cela fonctionne avec des formes non liées et liées? – dfrankow

3

Vous pouvez également utiliser un nouveau widget: Je l'ai fait pour que je puisse avoir un widget qui a créé un affichage de texte d'une date et une forme cachée avec la même date dedans, ainsi elle pourrait être visible à l'utilisateur, mais ils ne peuvent pas la changer.

Voici une première (toujours tester/être nettoyé) Version:

class DayLabelWidget(forms.Widget): 
    def render(self, name, value, attrs): 
     final_attrs = self.build_attrs(attrs, name=name) 
     if hasattr(self, 'initial'): 
      value = self.initial 
     if type(value) == type(u''): 
      value = datetime.date(*map(int, value.split('-'))) 
     return mark_safe(
      "%s" % value.strftime("%A (%d %b %Y)") 
     ) + mark_safe(
      "<input type='hidden' name='%s' value='%s' />" % (
       name, value 
      ) 
     ) 

    def _has_changed(self, initial, data): 
     return False 

Vous utilisez ensuite ce dans le domaine comme (widget=DayLabelWidget,).

5

Aussi, n'oubliez pas que vous pouvez également faire {{myform.instance.name}}

+0

Qu'est-ce que c'est? où est-il documenté? – dfrankow

+0

form.instance renvoie l'objet que le formulaire lié représente. C'est dans les docs ici: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean-method Je dois aussi mentionner que cela ne fonctionne qu'avec les modèles de modèle – priestc

+0

ah, google app engine ne supporte pas ModelForm, donc nous utilisons le formulaire. – dfrankow

2

Pourquoi ne pas utiliser {{field.data}}?

+0

Parce que cela devrait être fait dans les vues pas dans le modèle (dans le modèle est la boucle) –

11

vieux sujet, mais je pense que certaines personnes viennent toujours là.

Vous pouvez faire quelque chose comme ça aussi:

from django.utils.safestring import mark_safe 

class PlainTextWidget(forms.Widget): 
    def render(self, _name, value, _attrs): 
     return mark_safe(value) if value is not None else '-' 

Et dans votre forme

class SomeForm(Form): 
    somename = forms.CharField(widget=PlainTextWidget) 
Questions connexes