Tutorial part 3 help: bulleted-list

160 views
Skip to first unread message

Johnny McClung

unread,
Oct 18, 2016, 2:00:24 PM10/18/16
to Django users
I have gotten down to the part where the tutorial reads "Load the page by pointing your browser at “/polls/”, and you should see a bulleted-list containing the “What’s up” question from Tutorial 2. The link points to the question’s detail page."

I do not see a bulleted-list. All I see is "No polls are available."

This makes me think that I have an error in the if statement in the template index.html. However, I can not find the error or why it is not showing me the list. Any help would be appreciated. 

mysite>>polls>>templates>>polls>>index.html

{% if latest_question_list %}
<ul>
{% for quesion in latest_question_list %}
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}


mysite>>polls>>urls.py
from django.conf.urls import url


from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
]


.
mysite>>polls>>views.py
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from django.template import loader

from .models import Question

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = {'latest_quesion_list': latest_question_list,}
    return HttpResponse(template.render(context, request))


def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResonse(response % question_id)

def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

Vijay Khemlani

unread,
Oct 18, 2016, 3:28:17 PM10/18/16
to django...@googlegroups.com
You wrote "latest_quesion_list" in the context dictionary key, it should be "latest_question_list"

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/f0899689-fb34-4728-8ec6-7bfc661c348c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Vineet Kothari

unread,
Oct 18, 2016, 3:58:11 PM10/18/16
to django...@googlegroups.com

James Schneider

unread,
Oct 18, 2016, 5:17:55 PM10/18/16
to django...@googlegroups.com
On Tue, Oct 18, 2016 at 11:00 AM, Johnny McClung <jdmc...@gmail.com> wrote:
I have gotten down to the part where the tutorial reads "Load the page by pointing your browser at “/polls/”, and you should see a bulleted-list containing the “What’s up” question from Tutorial 2. The link points to the question’s detail page."

I do not see a bulleted-list. All I see is "No polls are available."

This makes me think that I have an error in the if statement in the template index.html. However, I can not find the error or why it is not showing me the list. Any help would be appreciated. 

The {% if %} statement is fine. 

 
mysite>>polls>>templates>>polls>>index.html

{% if latest_question_list %}
<ul>
{% for quesion in latest_question_list %}

You do have a typo in your {% for %} loop, however.



 
def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = {'latest_quesion_list': latest_question_list,}
    return HttpResponse(template.render(context, request))


This is where your issue is. Your template context dictionary also has the same typo as  your  {% for %} loop, so the {% if %} statement is returning False because the variable it is checking (which is spelled correctly) doesn't exist.

-James

Johnny McClung

unread,
Oct 18, 2016, 7:29:44 PM10/18/16
to Django users
Thanks so much everyone. I looked over those files many times and I couldn't see it. 

premalatha balan

unread,
Jul 16, 2018, 8:09:03 AM7/16/18
to Django users
Hi, 

I am having the same problem that it does not display bulleted list, but I do not have a typo. Below is what I have got. 

mysite>>polls>>view.py
from django.http import HttpResponse
from django.template import loader
from .models import Question

def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = {
'latest_question_list': latest_question_list,
    }
output = ', '.join([q.question_text for q in latest_question_list])
return HttpResponse(output) 
 
mysite>>polls>>templates>>polls>>index.html
{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

Can anyone help please? Thank you in advance

Jason

unread,
Jul 16, 2018, 8:13:08 AM7/16/18
to Django users
two problems: you're just returning a string in your response, not the template.
Nor are you using the context dict anywhere.

Look at the example in the tutorial:  https://docs.djangoproject.com/en/2.0/intro/tutorial03/#a-shortcut-render  How does your index method differ from what's there?

premalatha balan

unread,
Jul 16, 2018, 8:22:23 AM7/16/18
to Django users
Thank you so much. I have corrected the return including the context dict now. Thank you. It has solved it. Thank you again. 

premalatha balan

unread,
Jul 17, 2018, 10:06:17 AM7/17/18
to Django users
Hi all, 

I was doing ok until https://docs.djangoproject.com/en/1.11/intro/tutorial03/#namespacing-url-names part. Not sure what happened. 

The error is NoReverseMatch at /poll
"Reverse for 'detail' not found. 'detail' is not a valid view function or pattern name."

"Error during template rendering...
In template C:\Users\Balan\Documents\GitHub\my_django_code\mysite\polls\templates\polls\index.html, error at line 4

Reverse for 'detail' not found. 'detail' is not a valid view function or pattern name.
1 {% if latest_question_list %}
2     <ul>
3     {% for question in latest_question_list %}
4 <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
5 {% endfor %}
6     </ul>
7 {% else %}
8     <p>No polls are available.</p>
9 {% endif %}
10


This is what I have got on "detail.html".
{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
{% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}


Can you help please? Thank you. 
Reply all
Reply to author
Forward
0 new messages