2013-07-19 25 views
1

我嘗試將多個值發送到渲染字典方法,但我可以只在模板中達到第一個值。Django:將多個值傳遞給渲染方法的字典

我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'), 
) 
+1

你通過它在精細 - 所以我不認爲這是在爲'render'傳遞多個值做(你可以檢查的你可以在''symbol_list''之後傳入'book')。嘗試把'import pdb;調用'render'之前調用pdb.set_trace(),並查看'symbol_list'中的內容(請參閱http://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/ if )之前沒有使用過'pdb')。 –

+1

你介意在'return render(...)'之前'print symbol_list'並在控制檯中看到它嗎?順便說一下,你有一個基於類的視圖和功能視圖。你在URLConf中使用哪一個? –

+0

我剛剛添加了我的urls.py文件。我想我使用的是類而不是函數......很抱歉,這是我第一次使用django和python。 –

回答

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