2012-04-17 56 views
1

請幫助這個新的一年!合併不同的意見,在一個Django模板

我有兩種不同的看法:

@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

如果你在問題中更清楚,我想我不完全明白你想要什麼,這將是一件好事。但是,如果我這樣做,這裏有幾個選項:
1)如果你可以將你的邏輯分成一些功能,那麼做。然後,您可以從第三個視圖中調用這些函數,獲取您的模板參數並使用所需的一切呈現模板。
2)您也可以將這兩個模板分別加載到同一個頁面上,使用ajax。

可能有很多其他的選擇,它實際上取決於你想要達到什麼目的(這不清楚)。

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 %}