1

複数の値をレンダー ディクショナリ メソッドに送信しようとしましたが、テンプレートの最初の値にしか到達できません。

私のviews.pyコード:

from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from django.views import generic

from books.models import Book
from places.models import Symbol

class IntroView(generic.DetailView):
    model = Book
    template_name = 'books/intro.html'

def intro(request, book_id):
    book = get_object_or_404(Book, pk=book_id)
    symbol_list = Symbol.objects.all().order_by('name')
    return render(request, 'books/intro.html', {'book': book, 'symbol_list': symbol_list})

と私の intro.html テンプレート:

{% extends "base.html" %}
{% block content %}

<h2>{{ book.name }}</h2>
<h3>{{ book.catch_line }}</h3>
<em>{{ book.publication_year }}</em>

<hr />

<h4>Symbols</h4>
{% if symbol_list %}
    <ul>
    {% for symbol in symbol_list %}
        <li><img src="{{ symbol.icon.url }}"/>{{ symbol.name }}</li>
    {% endfor %}
    </ul>
{% else %}
    <p>No symbols yet...</p>
{% endif %}

{% endblock %}

テンプレートsymbol_listでは常に空ですが、モデルにはいくつかの値があります。

[編集]私の urls.py ファイル:

from django.conf.urls import patterns, url

from books import views

urlpatterns = patterns('',
    url(r'^(?P<pk>\d+)/$', views.IntroView.as_view(), name='intro'),
)
4

1 に答える 1

0

あなたが特定したように、IntroView渡さないクラスベースのビューを使用していsymbol_listます。

ビューを次のように変更してみてください。

class IntroView(generic.DetailView):
    model = Book
    template_name = 'books/intro.html'

    def get_context_data(self, **kwargs):
        context = super(IntroView, self).get_context_data(**kwargs)
        context['symbol_list'] = Symbol.objects.all().order_by('name')
        return context
于 2013-07-19T10:26:51.917 に答える