【问题标题】:Django 1.10 - Issue passing value from Template to ViewDjango 1.10 - 问题从模板传递值到视图
【发布时间】:2019-01-28 12:22:21
【问题描述】:

我在将变量从模板传递到视图时遇到问题。尽管我能够将变量从视图传递到模板,但我似乎无法正确处理。我看过类似的问题here

按照 Django 文档,我创建了一个 forms.py 脚本,如下所示:

forms.py

​​>

GNU nano 2.7.4 文件:forms.py

from django import forms

class TactForm(forms.Form):
        tacttime = forms.CharField(label='Tact Time', max_length=100)

更新视图

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render
from django.http import HttpResponse

from lineoee.models import Lineoee31

from .forms import TactForm

def details(request):
    if request.method == 'POST':
            form = TactForm(request.POST)
            print(form)
    else:
            form = TactForm()

    context = {'form' : form}

    return render(request, 'linedetails/index.html',context)

更新模板

            <form method="POST" action="{% url 'details' %}">
                    {% csrf_token  %}
                    {{ form.as_p }}
                    <label for="tacttime">Tact Time: </label>
                    <input id="tacttime" type="text" name="tacttime" value ="60">
                    <input type="submit" value="OK">
            <form>

更新的网址

from django.conf.urls import url
from django.contrib import admin
from lineoee.views import index
from lineoee.views import details

urlpatterns = [
    url(r'lineoee/$', index, name='index'),
    url(r'linedetails/', details, name='details'),
]

仍然没有错误,也没有传递给视图的值。


编辑

我现在在按下 OK 按钮时获得了一些数据,但这不是我所期望的。我希望能够检索输入到input 字段中的文本。我该怎么做?

“POST /linedetails/HTTP/1.1”200 24580

<tr><th><label for="id_tacttime">Tact Time:</label></th><td><input 
type="text" name="tacttime" value="60" required id="id_tacttime" 
maxlength="100" /></td></tr>

【问题讨论】:

  • 您遇到任何错误?您很可能会收到 csrf 验证错误。
  • 没有任何错误。页面会相应地呈现,但在按下提交时不会向控制台打印任何内容。
  • 发帖后可以通过控制台日志吗?
  • 您能分享指向该视图的 URL 吗?
  • 您发布到错误的 URL。 &lt;form method="POST" action="/details"&gt; 应该是 &lt;form method="POST" action="/linedetails"&gt;

标签: html django forms python-2.7 post


【解决方案1】:

模板

<div style="text-align:center;">
    <form method="POST" action="{% url 'details' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="adsfadsfas">
    </form>
</div>

观看次数(已编辑)

无论您在 HTML 模板的输入中使用什么名称,这都是您将用来获取 request.POST 中的内容的关键。这就是为什么您想在模板中使用{{ form.field }} 以便事先知道您希望在request.POST 中出现的字段的名称

def details(request):
    if request.method == 'POST':
            print(request.POST)
            print(request.POST.get('tacttime')
            form = TactForm(request.POST)
            print(form)
    else:
            form = TactForm()

    return render(request, 'linedetails/index.html', context)

网址

from django.conf.urls import url
from django.contrib import admin
from lineoee.views import index
from lineoee.views import details

urlpatterns = [
    url(r'lineoee/$', index, name='index'),
    url(r'linedetails/', details, name='details'),
]

【讨论】:

  • 谢谢,我正在尝试这个。同意观点和网址,但不理解模板部分。 form.as_p 是什么?谢谢
  • as_p 是表单内部的一个方法,它将表单呈现为一个 p HTML 标记。你可以查看here
  • 我相信我按照您的建议更新了所有内容,但无济于事。没有错误,但没有任何内容打印到控制台。
  • 感谢您的帮助,但也没有任何反应。在docs 之后,我想我对模板有些困惑。在教程中,它显示了两个单独的模板。一个带有&lt;input type="submit" value="OK"&gt; 行,另一个模板带有&lt;input type="submit" value="Submit"&gt;
  • 这很奇怪,我的意思是,您的帖子中没有任何内容。我可以使用此代码获取帖子并打印表格。您是否尝试过停止并重新启动服务器?听起来很傻,但谁知道呢
【解决方案2】:
def details(request):
    if request.method == 'POST':
            var = request.POST['textfield']
            print(var)

【讨论】:

  • 试过了,没有任何反应。
猜你喜欢
  • 2015-07-07
  • 2018-02-10
  • 1970-01-01
  • 2021-02-03
  • 2020-06-08
  • 2015-09-18
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多