1

How can I pass a list of items into a template?

In my views:

from django.shortcuts import render, render_to_response
from django.http import HttpResponse
from django.template import loader
from django.views.decorators.csrf import csrf_exempt
from .models import Question
from .forms import usersData1, usersData2, usersData3

def start_pr(response):
    name = ["Name","Phone Number","Email"]
    form = usersData1()
    return render_to_response(response, "start_pr/start.html", {"form":form}, {"name":name})

In my HTML:

{% block content %}
<form  action="/start/" method="post">
    <legend>
        {%for items in form %}
            {% for obj in name %}
                <p> {{ obj }} </p>
            {% endfor %}
            <input type="text" name="name" maxlength="20" required="" id="id_name" placeholder="{{items.name}}">
            <br>
        {% endfor %}
        <a href="#">next</a>
    </legend>
</form>
{% endblock %}

In my forms:

from Django import forms

class usersData1(forms.Form):
    name= forms.CharField(label="name", max_length=20)
    phoneNum= forms.IntegerField(label="phoneNum")
    email= forms.EmailField(label="email", max_length=50)

The list is in my views as name. I have used {% for obj in name %}<p>{{obj}}</p>.

When I go to localhost:8000 it shows an HTML form as the out product. which is weird (like opening up google view page sources when right-clicked). I am also new to Django but know how to make views and link them along with most of the basics.

What I don't know is this {%%}; what is this symbol called, and where can I find documentation on this syntax?

What I am trying to achieve in this Django view is to have 3 boxes with names from the list name as the name for that box (pretty much an iteration).

1 Answer 1

1

If you want to pass two (or more) elements to the template, you do that in the same dictionary:

def start_pr(response):
    name = ['Name', 'Phone Number', 'Email']
    form = usersData1()
    return render_to_response(
        response,
        'start_pr/start.html',
        {'form': form, 'name':name}
    )

However here it looks like you simply want to add placeholders. You can simply do that in the form:

from django import forms

class UsersData1(forms.Form):
    name= forms.CharField(
        label='Name',
        max_length=20,
        widget=forms.TextInput(attrs={'placeholder': 'Name'})
    )
    phoneNum = forms.IntegerField(
        label='Phone Number',
        widget=forms.NumberInput(attrs={'placeholder': 'Phone Number'})
    )
    email= forms.EmailField(
        label='Email',
        max_length=20,
        widget=forms.TextInput(attrs={'placeholder': 'Email'})
    )

This will avoid complicated logic in the template which is not the purpose of a template anyway. A template is used for rendering logic.

Sign up to request clarification or add additional context in comments.

1 Comment

thanks that's really helpful, but what are {%%} called. what should they be used for, if not for logics ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.