Asteroide404
Asteroide404

Reputation: 13

Django template language syntax

I'm learning django and i'm blocked on a template syntax error.

I have this function in my views.py :

def AccountUpdateView(request):
    template_name='portal/accountupdate.html'
    context = {"forms":UserForm}
    return render(request,template_name,context)

There is my template :

    <form action="/account/update/" method="POST">
        <ul>
    {% csrf_token %}
    {% for form in forms %}
        <li>{{form.label}}
            <input type="text" name="{{form.name}}" maxlength="32" required="" id="id_{{form.name}}" value="{{PLEASE HELP ME !!!}}">
        </li>
    {%endfor%}
    </ul>
    <input type="submit" value="Metre a jour" />
    </form>

Well, i'm trying to get in the "value" of each form on my template by the current registered user known in django by the call {{user}} And i would to auto place the values of each forms.

I think a solution is to use the form.name (for the example of the case 'username') and in the value call a thing like this :

user.form.username

It doesn't work and i know that i was dream to hope this exotic call don't work...

If any have a solution :)

Thank's you !

Upvotes: 1

Views: 184

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 599590

You shouldn't do this at all. Django will automatically output the whole field if you ask it.

For a start, use proper names for your objects. Secondly, if you want to prepopulate the form with data from the current user, then do so in the view. Note, you also need to deal with the posted data:

def AccountUpdateView(request):
    template_name='portal/accountupdate.html'
    if request.method == 'POST':
        form = UserForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('/')
    else:
        form = UserForm(instance=request.user)
    context = {"form":form}
    return render(request,template_name,context)

Now, use the proper values and attributes in the template:

{% for field in form %}
    <li>{{ field.label_tag }}
        {{ field }}
        {{ field.errors }}</li>
{% endfor %}

Upvotes: 1

Related Questions