2012-02-13 70 views
0

我是Django和Python的新手,請原諒我,如果這是一個noobie問題。我有一個應用程序在那裏我有3次:Django {%include%} HTML不能正確呈現

#views.py 

from django.shortcuts import render_to_response 
from django.shortcuts import render 
from django.http import HttpResponse, HttpRequest, HttpResponseRedirect 
from acme.acmetest.models import Player 
from acme.acmetest.models import PickForm 

def playerAdd(request, id=None): 
    form = PickForm(request.POST or None, 
         instance=id and Player.objects.get(id=id)) 

    if request.method == 'POST' and form.is_valid(): 
     form.save() 
     return HttpResponseRedirect('/draft/') 

    return render(request, 'makepick.html', {'form':form}) 

def draftShow(request): 
    draft_list = Player.objects.all() 
context_instance=RequestContext(request) 
    return render_to_response('listpicks.html', {'draft_list' :draft_list}) 

def draftPage(request): 
    return render(request, 'pickpage.html') 

的playerAdd和draftShow觀點正確渲染當他們在自己的瀏覽器中自己的呼叫(映射到不同的HTML文檔不同的URL)。 draftPage視圖調用一個HTML頁面:

pickpage.html 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<HTML lang="en"> 
<head> 
    <title>PickPage</title> 
</head> 
<body> 

{% include "makepick.html" %} 
{% include "listpicks.html" %} 

</body> 
</HTML> 

當我調用這個頁面時,我只能得到其他兩個html頁面的一部分。我得到表單上的按鈕,但沒有輸入測試的字段,我得到了listpicks的文本,但沒有從數據庫中提取的列表。這些只是HTML頁面,正如我之前所說的那樣,當我自己調用它們時,它們會工作。

謝謝你的幫助。

dp

+0

您確定這兩個HTML文件的內容是有效的嗎?確保您的所有標籤都已關閉。 – Blender 2012-02-13 18:52:05

+0

你可以發佈其他兩個文件嗎? - 以及你認爲應該得到什麼的粗略想法? – 2012-02-13 18:52:09

回答

3

你的問題是你很迷惑包含意見。

當您使用include時,所有發生的都是該模板的html插入的那一點。

與使用您包含的模板的其他視圖沒有任何關係。所以你必須在你使用的視圖中爲包含的模板指定上下文。

所以在你的情況下,來自playerAdd和draftShow的上下文不可用,因爲你還沒有將它添加到draftPage中的渲染方法。

def draftPage(request): 
    form = PickForm() 
    draft_list = Player.objects.all() 
    context = { 
     'form':form, 
     'draft_list' :draft_list, 
    } 
    return render(request, 'pickpage.html', context) 

會給你你在視圖之後。只要確保表單提交到playerAdd視圖來正確處理它。

+0

哦。我認爲,因爲我有其他視圖呈現到網頁中,我只能將這些頁面調入另一個頁面......謝謝! – dpbklyn 2012-02-13 19:44:05