Django {%include%} HTML无法正确呈现

时间:2012-02-13 18:49:07

标签: django include render

我是Django和Python的新手,如果这是一个noobie问题,请原谅我。我有一个应用程序,我有3个视图:

#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

1 个答案:

答案 0 :(得分:3)

你的问题是你的观点令人困惑。

当您使用include时,所有发生的事情都是在该点插入该模板的html。

与使用您所包含的模板的其他视图无关。因此,您必须在正在使用的视图中指定所包含模板的上下文。

所以在你的情况下,playerAdd和draftShow的上下文不可用,因为你还没有将它添加到draftPage中的render方法。

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

在你看来会给你你想要的东西。只需确保表单提交到playerAdd视图即可正确处理。

相关问题