在一个django模板中合并不同的视图

时间:2012-04-17 20:17:11

标签: django templates views

请帮助这个新手!!!

我有两种不同的观点:

@login_required
@csrf_protect
def viewone(request):

#some code here...

if request.method == 'POST':
    form = ViewOne(request.POST)
    if form.is_valid():
        try:
            #some code here

        return response
else:
    form = ViewOne()

return render_to_response('templateone.html', { 'form': form, }, context_instance=RequestContext(request))

@login_required
@csrf_protect
def viewtwo(request):

if request.method == "GET":

    #code here

    return render_to_response('templatetwo.html', {'form1': MyForm(request.GET)}, context_instance=RequestContext(request))
else:
    return render_to_response('templatetwo.html', {'form1': MyForm()}, context_instance=RequestContext(request))

我想知道如何将这些视图合并/渲染到同一个模板中,以便使用这两个功能!请帮我跟上正确的方向!

2 个答案:

答案 0 :(得分:2)

如果你在问题中更清楚,那将是一件好事,因为我认为我并不完全明白你想要什么。但如果我这样做,这里有几个选择:
1)如果您可以将逻辑分成某些功能,请执行此操作。然后,您可以从第三个视图调用这些函数,获取模板参数并使用您想要的所有内容呈现模板 2)您也可以使用ajax在同一页面上单独加载这两个模板。

可能还有很多其他选择,这实际上取决于你最终想要得到什么(目前尚不清楚)。

答案 1 :(得分:0)

如果要在一个视图中将相同的表单合并到一个模板中:

from django.shortcuts import render

@login_required
@csrf_protect
def viewone(request):

   ctx = {} # context dict
   if request.method == 'GET':
     # code here
     form1 = MyForm(request.GET)
     ctx['form1'] = form1
     return render(request,'template.html',ctx)

   if request.method == 'POST':
     form = ViewOne(request.POST)
     if form.is_valid():
         # code here
         return render(request,'some.html')
     else:
        form = ViewOne()
        ctx['form'] = form
        return render(request,'template.html',ctx)

然后在template.html

{% if form %}
   {{ form }}
{% endif %}

{% if form1 %}
   {{ form1 }}
{% endif %}