Разбор шаблона Django - PullRequest
       1

Разбор шаблона Django

0 голосов
/ 29 декабря 2011

Я создаю объект в моем представлении (с помощью другого сайта ):

def myfavorites(request):

    queryset = Favorite.objects.favorites_for_user(user=request.user).select_related('content_type', 'content_object')

    generics = {}
    for item in queryset:
        generics.setdefault(item.content_type_id, set()).add(item.object_id)

        content_types = ContentType.objects.in_bulk(generics.keys())

        relations = {}
        for ct, fk_list in generics.items():
            ct_model = content_types[ct].model_class()
            relations[ct] = ct_model.objects.in_bulk(list(fk_list))

        for item in queryset:
            setattr(item, '_content_object_cache', 
                relations[item.content_type.id][item.object_id])

        return render_to_response('myfavorites.html', {
            'favorites':relations
        },
        context_instance=RequestContext(request))

Это передает объект в мой шаблон, который гласит:

{8L: {33L: <Author: Poe>}, 21L: {32L: <Book: The Great Gatsby>, 7L: <Book: Great Expectations>}, 22L: {7L: <Quote: Hamlet>}}

Где 8 - это идентификатор моей таблицы Author, 21 - это идентификатор моей таблицы Book, а 22 - идентификатор моей таблицы Quote.

Я пытаюсь перечислить объект так, чтобы он читал:

Авторы
Poe

Книга
Великий Гэтсби
Большие ожидания

Цитата
Гамлет

Как бы я проанализировал этот объект в шаблоне django?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Отправлять словари в шаблон отдельно.Отправьте один словарь авторов, словарь книг и словарь цитат.Тогда вы можете разобрать каждый в отдельности.Замените следующие поля a.name полем имени модели автора, b.name полем имени книги и q.quote полем строки цитаты.Например:

<div class="title">Authors</div>
{% for a in Authors %}
    <div>{{ a.name }}</div>
{% endfor %}

<div class="title">Books</div>
{% for b in Bookss %}
    <div>{{ b.name }}</div>
{% endfor %}

<div class="title">Quotes</div>
{% for q in Quotes %}
    <div>{{ q.quote }}</div>
{% endfor %}

Если у вас нет контроля над отдельными данными, вы можете проанализировать объект в представлении для передачи в шаблон:

Authors = object['8L'] # Not positive about the Long, may need to convert.
Books = object['21L'] # Not positive about the Long, may need to convert.
Quotes = object['22L'] # Not positive about the Long, may need to convert.

Вернуть эти переменныек шаблону.

0 голосов
/ 29 декабря 2011

Я бы передал контекст, который более структурирован следующим образом:

{
    'authors': [<Author: Poe>],
    'books': [
        <Book: The Great Gatsby>,
        <Book: Great Expectations>,
    ],
    'quotes': [<Quote: Hamlet>],
}

Тогда вы можете легко сделать что-то вроде этого:

<h1>Authors</h1>
{% for author in authors %}{{ author }}{% endfor %}

<h1>Books</h1>
{% for book in books %}{{ book }}{% endfor %}

<h1>Quotes</h1>
{% for quote in quotes %}{{ quote }}{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...