2016-01-21 97 views
0

我是Django的新手,並且在表單中遇到了一些問題。我試圖顯示一個文本輸入,以便用戶可以輸入他們的電話號碼,並將其發送到我的電子郵件。我實際上會將它存儲在一個postgre數據庫中,但希望首先獲取基本信息。正在顯示提交按鈕,但文本輸入字段不是。我嘗試將views.py中的forms.py放在裏面,看看PhoneForm()函數和文件是否沒有導入,但是沒有做任何事情。表單字段不在模板中顯示

views.py

from django.shortcuts import render, redirect 
from django.http import HttpResponse, HttpResponseRedirect 
from django.core.mail import send_mail 

from .forms import PhoneForm 

# Create your views here. 

def index(request): 
    # Render the index.html template with a context dictionary 
    return render(request, "index.html") 

def get_number(request): 
    # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
     #create a form instance 
     form = PhoneForm(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      send_mail(
       cd['phone_form'], 
       ['[email protected]'], 
      ) 
      return HttpResponseRedirect('/thanks/') 
    else: 
     form = PhoneForm() 
    return render(request, 'index.html', {'form': form}) 

的index.html

<form action="" method="post"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 

forms.py

from django import forms 

class PhoneForm(forms.Form): 
    phone_form = forms.CharField(widget=forms.TextInput()) 

編輯:添加urls.py(一個在應用程序)

from django.conf.urls import include, url 
from django.contrib import admin 

from . import views 

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^$', views.get_number, name='get_number'), 
] 
+0

你能顯示urls.py嗎? – vadimchin

+0

@vadimchin ahhh我忘了那些..補充。我想知道是不是有什麼問題 – TheFlyingProgrammer

回答

0

urls.py兩個URL具有相同的表達r'^$'和django的查找它們以便,因此,第一個(索引)將總是被選中。這鏈接到索引視圖,而不是get_number視圖。這意味着表單不會傳遞給模板,並且表單不顯示。

解決這個移動url(r'^$', get_number),到「urlpatterns」的頂部。

+0

這工作!謝謝!我對一件事感到困惑......這是否意味着每個頁面只能有1個「視圖」?你如何在一個頁面中實現多個表單?我一直認爲「意見」只是頁面的某個部分,但它看起來像是整個事情...... – TheFlyingProgrammer

+0

是的,意見是整個頁面。要在視圖中實現多於一個表單設置2個窗體'form1 = PhoneForm()'和'form2 = PhoneForm()',然後在模板{{form1}}和{{form2}}'內調用它們HTML表單。然後在''按鈕中輸入'name = form1submit'作爲第一種形式(並且在第二種中做同樣的操作),然後在視圖中'if request.method =='POST''和'request.post'中的if'form1submit'執行第一種形式的行爲'elif'form2submit in request.post'爲第二種形式執行動作。更多細節可以在這裏找到:http://stackoverflow.com/questions/1395807/ – ijames55

0

變化從{{形式}}到{{form.phone_form}} index.html中

+0

沒有變化:C有趣的是,只是在頁面上,當我嘗試刷新時,出現一個谷歌瀏覽器錯誤信息,提示「確認表單重新提交。您正在查找的頁面使用了您的信息輸入「即使沒有可見的形式 – TheFlyingProgrammer

相關問題