Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django的隐藏场流_Python_Django_Django Forms_Hidden Field - Fatal编程技术网

Python 使用Django的隐藏场流

Python 使用Django的隐藏场流,python,django,django-forms,hidden-field,Python,Django,Django Forms,Hidden Field,我试图接收一个POST,然后生成一个包含新字段的表单,并将我在前面的POST中收到的值作为隐藏变量传递。我在文档中做了大量搜索,似乎找不到任何连接此流程两侧的东西。我正在使用Django1.4w/Python2.7 views.py from django.shortcuts import render_to_response from gateway_interface.forms import newForm def requestNewForm(request): if (req

我试图接收一个
POST
,然后生成一个包含新字段的表单,并将我在前面的
POST
中收到的值作为隐藏变量传递。我在文档中做了大量搜索,似乎找不到任何连接此流程两侧的东西。我正在使用Django1.4w/Python2.7

views.py

from django.shortcuts import render_to_response
from gateway_interface.forms import newForm

def requestNewForm(request):
    if (request.method == "POST"):
        form = newForm(request)

        return render_to_response('myTemplate.html', {'form' : form})
from django.shortcuts import render_to_response
from gateway_interface.forms import newForm

def requestNewForm(request):
    if (request.method == "POST"):
        initial_dict = { 'my_passed_variable' : request.POST.get('pass_variable') }
        form = newForm(initial = initial_dict)

        return render_to_response('myTemplate.html', {'form' : form})
forms.py

from django import forms
class newForm(forms.Form):
    def __init__(self, request):
        my_passed_variable = request.POST['pass_variable']

    a_new_variable = forms.CharField(max_length = 25)

    my_passed_variable = forms.CharField(widget = forms.HiddenInput())
myTemplate.html

<form action="/myNextDjangoView/" method="post">
    <div class="fieldWrapper">
        I need this value: {{ form.a_new_variable }} <br>
    </div>

    {% for hidden in form.hidden_fields %}
        {{ hidden }}
    {% endfor %}
<input type="submit" value="Submit">
</form>
这并没有改变我的输出。我仍然得到相同的表单,没有显示字段(隐藏或可见)。我需要做的是使用初始化字典进行实例化。(我想?)其中字典包含所有隐藏字段的名称和值

initial_dict = { 'my_passed_variable' : request.POST.get('pass_variable') }
form = newForm(initial = initial_dict)
编辑2:

使用初始化字典是朝着正确方向迈出的一步!我现在可以看到表单中的可见字段,但隐藏字段仍然没有填充

views.py

from django.shortcuts import render_to_response
from gateway_interface.forms import newForm

def requestNewForm(request):
    if (request.method == "POST"):
        form = newForm(request)

        return render_to_response('myTemplate.html', {'form' : form})
from django.shortcuts import render_to_response
from gateway_interface.forms import newForm

def requestNewForm(request):
    if (request.method == "POST"):
        initial_dict = { 'my_passed_variable' : request.POST.get('pass_variable') }
        form = newForm(initial = initial_dict)

        return render_to_response('myTemplate.html', {'form' : form})
编辑3:


我让它工作了。感谢乔丹·雷特把我推向了正确的方向。原来问题几乎完全是我的浏览器在上面的
edit1
之后的缓存问题。我转到了Chrome的匿名模式,一切都正常了。

这段代码肯定有问题:

from django import forms
class newForm(forms.Form):
    def __init__(self, request):
        my_passed_variable = request.POST['pass_variable']

    a_new_variable = forms.CharField(max_length = 25)

    my_passed_variable = forms.CharField(widget = forms.HiddenInput())
首先,有两个名称相同的变量(尽管其中一个是
self.my_passed_variable
在整个表单中都可用,而另一个只是
my_passed_variable
仅在
\u init\u
中可用)令人难以置信地困惑。我忍不住想你是想把这两个变量联系起来,但你不是。最坏/最好的情况(如果您将
my\u passed\u variable=request.POST['pass\u variable']
重写为
self.my\u passed\u variable=request.POST['pass\u variable']
),您将用字符串覆盖表单字段对象的值

其次,我假设您从
\uuuu init\uuuu
函数中剪出了一堆代码。您缺少了
super
,这实际上是一个表单。目前,表单对象不会被正确实例化

如果您正在尝试做我认为您正在尝试做的事情,您希望以这种方式重写它:

from django import forms
class newForm(forms.Form):
    # first, I'm going to put the fields at the top, I think that's more standard
    a_new_variable = forms.CharField(max_length = 25)
    my_passed_variable = forms.CharField(widget = forms.HiddenInput())

    def __init__(self, request, *args, **kwargs):
        super(newForm, self).__init__(*args, **kwargs)
        self.fields['my_passed_variable'].initial = request.POST.get('pass_variable') # don't assume the variable is present!

我试图理解你在这里发布的内容,但它不起作用。是否有关于如何执行此操作的适当文档?我已经搜索了Django的网站,试图找到如何做到这一点的信息。你想做什么?如果您试图更改字段中的值,则此代码是正确的。它怎么不起作用?您收到了什么错误消息?