表单数据未作为帖子发送到视图

时间:2015-08-29 02:04:54

标签: django forms post get action

嗨我的主页上有两个表格,一个`联系我们'表单和“下拉”表单以更改网站的语言。由于两个表单都将在基本模板中,因此我必须找到一种方法将表单内容发送到特定视图以处理提交。目前我的网站是单页网站,所以我没有联系表格的问题

联系表格

<form method="post" action="" role="form" id="footer-form">
{% csrf_token %}
<div class="form-group has-feedback">
    <label class="sr-only" for="{{ form.name.label }}">{{ form.name.label }}</label>
    {{ form.name }}
    <p class="help-block danger">{{ form.name.errors }}</p>
    <i class="fa fa-user form-control-feedback"></i>
</div>
<div class="form-group has-feedback">
    <label class="sr-only" for="{{ form.email.label }}">{{ form.email.label }}</label>
    {{ form.email }}
    <p class="help-block danger">{{ form.email.errors }}</p>
    <i class="fa fa-envelope form-control-feedback"></i>
</div>
<div class="form-group has-feedback">
    <label class="sr-only" for="{{ form.message.label }}">{{ form.message.label }}</label>
    {{ form.message }}
    <p class="help-block danger">{{ form.message.errors }}</p>
    <i class="fa fa-pencil form-control-feedback"></i>
</div>
<input type="submit" value="Send" class="btn btn-default">
</form>

语言形式是

<form action="/setlang" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="/"/>
<select name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"
{% if language.code == LANGUAGE_CODE %}
selected="selected"{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go"/>
</form>

查看呈现页面

@csrf_exempt
def home(request):
    # send_email(['elraphah@gmail.com'],'YonniQ','info@verdin.no',"Testing","Thanks for the Test" )

    form = ContactForm()
    if request.method=='POST':
        form = ContactForm(request.POST)
        print 'Form Validation '
        print form.is_valid()
        if form.is_valid():
            send_email(['info@verdin.no'], request.POST['name'], request.POST['email'], request.POST['message'])

    return render_to_response('home.html',locals())

由于我在django的i18n的set_language视图中遇到了一些问题,我决定在我的表单操作中创建自己的setlang。 当我在联系表单中将操作属性设置为空并提交时,表单将提交到我的主视图,queryDict包含表单字段和值,但是当我尝试提交到另一个视图时,在这种情况下通过{{1} } url表单没有发布,我只得到并清空queryDict。我不知道为什么会这样。

1 个答案:

答案 0 :(得分:0)

尝试使用url标记(https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url),您必须在urls.py中定义两个网址,因此在每个操作表单属性中使用标记放置正确的视图名称,例如:

联系表格:

action={% url 'home' %} # url(r'^/$', views.home, name='home')

对于setlang形式:

action={% url 'setlang' %} # url(r'^/setlang$', views.set_lang, name='setlang')

然后在每个功能视图中,您可以通过post方法过滤请求,就像在主视图中一样。

希望它可以提供帮助。