Вопрос новичка в Django относительно определения объекта с подобъектами из моделей для использования в шаблонах

Я новичок в Django и искал несколько простых примеров создания объектов с подобъектами в представлениях, чтобы в шаблонах можно было вложить циклы for.

Вот мой models.py для этого приложения ...

from django.db import models
from django import forms

class Market(models.Model):
    name   = models.CharField('Market name', max_length=150)
    state  = models.CharField('State', max_length=2)

    def __unicode__(self):
        return self.name

class Location(models.Model):
    name   = models.CharField('Location name', max_length=150)
    address1  = models.CharField('Address 1', max_length=200)
    address2  = models.CharField('Address 2', max_length=200,blank=True)
    city   = models.CharField('City', max_length=100)
    state   = models.CharField('State', max_length=2)
    zip_code = models.CharField('ZIP', max_length=10)
    phone  = models.CharField('Phone', max_length=20)
    hours  = models.TextField('Hours of operation', max_length=255)
    quote_text = models.TextField('Customer quote', max_length=500)
    quote_by = models.CharField('Customer name', max_length=30)
    yelp_url = models.URLField('Yelp URL', max_length=300,blank=True)
    image_store = models.ImageField('Storefront image', upload_to='images/locations', max_length=300,blank=True)
    image_staff = models.ImageField('Staff image', upload_to='images/locations', max_length=300,blank=True)
    market  = models.ForeignKey(Market, verbose_name='Regional market', null=True)

    def __unicode__(self):
        return self.name

Данные по рынкам могут выглядеть следующим образом ...

id = 1
state = 'MO'
name = 'St. Louis - Central'

id = 2
state = 'MO'
name = 'St. Louis - West'

id = 3
state = 'IL'
name = 'Chicago - South'

id = 4
state = 'IL'
name = 'Chicago - North'

В моем views.py я хотел бы создать объект со списком / массивом сгруппированных состояний рынка (отдельных) в порядке убывания, каждый с подмассивом отдельных Названия рынков в этом состоянии, чтобы завершить вложенный цикл в шаблон.

Язык шаблонов в Django действительно хорош тем, что предотвращает размещение тонны логики между HTML, что мне нравится. Но я все еще занимаюсь синтаксисом Python и необходимостью создавать все объекты именно так, как они должны повторяться в шаблоне.

Вот как выглядит views.py ...

def locations_landing(request):
    marketList = Market.objects.values('state').order_by('-state').distinct()
    return render_to_response('locations.html', locals()) 

Как вернуть объект, чтобы мой шаблон мог выполнить следующий вложенный цикл ...

{% for st in stateList.all %}
    <h4>{{ st.state }}</h4>
    {% for mkt in stateList.marketList.all %}
        <p>* <a href="#">{{ mkt.name }}</a></p>
    {% endfor %}
{% endfor %}

Это приведет к следующему, отображенному в html на основе моих образцов данных выше ...

<h4>MO</h4>
<p>* St. Louis - Central</p>
<p>* St. Louis - West</p>
<h4>IL</h4>
<p>* Chicago - South</p>
<p>* Chicago - North</p>

Кстати, нет ошибки в любом из приведенных выше примеров кода .PY, все в порядке, мне просто нужны некоторые рекомендации по правильному созданию объекта в представлении, чтобы шаблон справился со своей задачей.

1
задан sansjoe 20 September 2010 в 20:19
поделиться