Greetings, sports fans.

There is an old saying, three strikes and you're out. They also say the 
third time is the charm. Let’s see which one this is for me, shall we?


This is the 3rd time in the last two years that I have been stuck for more 
than a few *days* on a problem getting my data onto a template. (I’m 
obviously not a full time developer). Although the symptom is the same, 
they do not all seem to be precisely the same cause, but I don’t think that 
matters. What matters here is that clearly, I just plain don’t understand 
context. It seems like a simple concept, but I can’t seem to execute it 
*routinely 
and effectively*. 


Here’s my view:


#!/usr/bin/python
#-*- coding: utf-8 -*- 

from django.shortcuts import render 
from .models import Jurisdiction 

def statehome(request, twodigit): 
 state = Jurisdiction.objects.all() 
 ace = 'spades' 
 context={'state':state, 'ace':ace} 
 return render (request, 'statehome.html', context)



Twodigit is just the postal code that I use in the url. Nothing related to 
state or jurisdiction displays on the template. I put ‘ace’ in there just 
as a test, and ‘spades’ shows up bright and bold just like it should. Here 
is the relevant portion of the template:

 <h2 class="title">{{state.name}}{{ ace }}</h2>


this is what I get in the shell:


In [23]: J=Jurisdiction.objects.all()

In [27]: for state in J: 
 ...: print(state.name) 
 ...: 
United States of America 
Alabama 
Alaska 
Arizona 
...etc…



It is not called for in this particular template, but I decided to put a 
for loop in there, too, just to test it:


{% for state in states %}

{{ state.name }}

{% endfor %}


You guessed it! Nothing.


According to Django Debug Toolbar, I have this context in my template:


{'ace': 'spades', 'state': '<<queryset of bench.Jurisdiction>>'}


But that same Toolbar also says I only executed two sql queries: one for 
the session and one for the user.


Earlier, I discovered that *a queryset of one is not the same as a single 
objec*t, and that it always helps to get the right name of your object:


In [3]: Jurisdiction.objects.filter(name="United States")

Out[3]: <QuerySet []>



In [5]: Jurisdiction.objects.get(name="United States")

DoesNotExist: Jurisdiction matching query does not exist.


In [6]: Jurisdiction.objects.get(name="United States of America")

Out[6]: <Jurisdiction: United States>


In [7]: us=Jurisdiction.objects.get(name="United States of America")


In [8]: us.name

Out[8]: 'United States of America'


So when I used ‘get’ instead of ‘filter’ in my view, it worked. But that 
does *not* solve my problem.* What happens when I want a list of objects? **Or 
several different objects and their attributes? Isn’t that supposed to be a 
queryset? Then how do I make them show up in the template? Why does my for 
loop and state.name work in the shell with objects.all(), but neither works 
in the template?*


I don’t understand. I’m sure it is staring me right in the face, and is 
obvious to you, but *I just plain don’t get it*. So if I could get an 
explanation, and a how to, that would be great. And if you can point to a 
book, website, tutorial, whatever – not the official docs, thank you, I can 
recite them in my sleep and clearly I’m not getting it – that explains all 
this slowly, step by step, big picture and little picture, with examples 
and an explanation of vocabulary, that would be really great. Thanks. 

-- 
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+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@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/11932523-c612-4938-bb27-0bd1527e3ed8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to