2010-11-30 18 views
3

Les méthodes as_html, as_ul, as_p intégrées aux formulaires Django ne fonctionnent pas pour moi, pas plus que le rendu {{field}} intégré, donc j'essaye d'écrire un rendu de formulaire personnalisé.Comment obtenir la valeur d'un BoundField dans un template django?

Voici ce que j'ai jusqu'à présent:

<input id="id_{{field.html_name}}" 
        type="text" 
        name="{{field.html_name}}" 
        placeholder="{{field.label}}" <!-- "placeholder" is really the only reason I need to do a custom implementation --> 
        value="{{ XXX }}"  <!-- what goes here? --> 
        maxlength="30" /> 

La question est, ce qui devrait aller dans l'attribut de valeur (indiquée au-dessus XXX)?

J'ai fait quelques recherches et il ne semble pas que BoundField prenne en charge un attribut value ou data. J'utilise ModelForms si cela est important

Répondre

3

L'attribut value a été placé dans le tronc in 2010. Le patch montre comment récupérer la valeur en utilisant le formulaire/data (pas simple dans un template malheureusement). Il y a des extraits de code de balise de gabarit dans les commentaires de billets que vous pouvez trouver utiles.

1

J'ai essayé de trouver une réponse à cette question pendant plusieurs heures. La réponse ci-dessus ne m'a pas aidé.

J'ai trouvé la solution ici: http://djangosnippets.org/snippets/2264/

Vous devez ajouter un nouveau répertoire:/YourProject/yourapp/templatetags/

Dans/YourProject/YourApp/templatetags/lieu 2 fichiers:

__init__.py - fichier vide

de field_value.py - avec le code suivant:

from django import template 
register = template.Library() 

@register.simple_tag 
def field_value(field): 
    """ returns field value """ 
    return field.form.initial.get(field.name, '') 

Au début de votre modèle que vous Nedd ajouter:

{% load field_value %} 

Si vous voulez afficher une valeur d'un champ vous devez ajouter:

{% field_value form.field %} 

Ou si vous avez déjà un variable « champ », puis juste:

{% field_value field %} 

Pour moi, ce fut un champ avec le nom « texte » d'une forme en ligne, donc j'ajouté le code suivant

{% field_value inline_admin_form.form.text %} 
0

En supposant que le nom de domaine est "utilisateur" et le nom de formulaire est "user_form", il existe deux valeurs:

initial 1):

{{ user_form.initial.username }} 

2) lié:

{{ user_form.username.data }}