【问题标题】:form data not sent to view as post未发送表单数据以查看为帖子
【发布时间】:2015-08-29 02:04:54
【问题描述】:

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

联系表格是

<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 包含表单字段和值但是当我尝试提交到另一个视图时,在这种情况下是通过/setlang url表格没有发布,我只得到并清空queryDict。我不知道为什么会这样。

【问题讨论】:

    标签: django forms post get action


    【解决方案1】:

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

    联系表格:

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

    对于 setlang 形式:

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

    然后在每个函数视图中,您可以通过 post 方法过滤请求,就像您在主页视图中所做的那样。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 2017-08-27
      • 1970-01-01
      • 2021-02-23
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      相关资源
      最近更新 更多