2012-02-13 141 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