2016-01-21 57 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

相关问题