2012-09-12 38 views
0

我想創建一個表單插入多個頁面。在下面的例子中,我創建了一個「form.html」模板,並嘗試在「index.html」中輸入。我已經有了索引的視圖(在這個例子中簡化了)。因此,我不知道如何調用myform視圖來將表單包含在索引中。多個視圖調用和模板包含

# urls.py 
urlpatterns = patterns('', 
    url(r'^$', 'index'), 
    url(r'^form$', 'myform'), 
) 

# views.py 
def index(request): 
    return render(request, 'index.html') 

def myform(request): 
    if request.method == "POST": 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      request.session['name'] = form.cleaned_data['name'] 
      return HttpResponseRedirect('/form') 
    else: 
     form = MyForm() 

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

# form.html 
<form action="/form/ok" method="post">{% csrf_token %} 
{{ form.as_p }} 
<input type="submit" value="Submit" /> 
</form> 

# index.html 
.... 
{% include "form.html" %} 
.... 

回答

1

這是@ rockingskier的答案的擴展。我更改了myform視圖以返回變量form並在index視圖中調用它。

# urls.py 
urlpatterns = patterns('', 
    url(r'^$', 'index'), 
) 

# views.py 
def myform(request): 
    if request.method == "POST": 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      request.session['name'] = form.cleaned_data['name'] 
      return HttpResponseRedirect('/ok') 
    else: 
     form = MyForm() 

    return form 

def index(request): 
    args['form'] = myform 
    return render(request, 'index.html') 
3

{% include %} ing是一種在模板中包含額外html的方式。它不會路由用戶通過各種不同views

在您的代碼中,用戶將進入index並給予index.htmlindex.html然後將{% include %}內部的form.html內容與myform視圖無關。在form.html之內,模板將預計稱爲form的變量。 form尚未在此上下文中設置,因爲它不是在index中創建的,因此不會呈現任何表單內容。 (這些標籤將因爲它們不依賴於form變量)。

所有的變量,你應該使用的是view內設置。因此,您需要創建一個表單對象並在index之內傳遞它。在index.html之內form.html將收到form變量它期望。

如果您決定在index中,您不希望打電話給您的表格form(比如說您有多個表單,因此需要更多有用的名稱)。那麼你可以{% including "form.html" with form=form_variable_from_index %}。這將基本上重命名錶單變量,但僅在該「{%include%}」d文件中。

https://docs.djangoproject.com/en/1.4/ref/templates/builtins/#include

# views.py 
def index(request): 

    # Need to create the form here 
    form = MyForm() 

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

def myform(request): 
    if request.method == "POST": 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      request.session['name'] = form.cleaned_data['name'] 
      return HttpResponseRedirect('/form') 
    else: 
     form = MyForm() 

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

查看了解它們指的是一個模板。模板不知道視圖,只是你交給他們的上下文/變量。

相關問題