Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
在Django中将数据从模板传递到视图_Django - Fatal编程技术网

在Django中将数据从模板传递到视图

在Django中将数据从模板传递到视图,django,Django,从Django模板,我将id作为参数与其url一起传递 <a href="/add/?q={{mytable.id}}" >Next</a> 然后,我尝试从数据库中获取所有对象,其中id='id',如下所示: obj=mytable.objects.get(id='q1') class MyForm(forms.ModelForm): class Meta: model = MyModel fields = ('info', '

从Django模板,我将id作为参数与其url一起传递

<a href="/add/?q={{mytable.id}}" >Next</a>
然后,我尝试从数据库中获取所有对象,其中id='id',如下所示:

obj=mytable.objects.get(id='q1')
class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ('info', 'url')
问题是当我试图打印q1时,它总是空的。你能告诉我哪里出了问题吗

全貌

def addview(request):
    q1=request.GET.get('q','')
    if request.method == 'POST':
        form= myform(request.POST)
        if form.is_valid():
            obj=mytable.objects.get(id=q1)
            obj.info = form.cleaned_data['info']
            obj.url= form.cleaned_data['content']
            obj.save()
        return HttpResponseRedirect('/success/')

    else:
        form=myform()
    variables=RequestContext(request, {
    'form':form
    })

    return render_to_response('/add/add.html', variables,)
forms.py

class myform(forms.Form):

info=forms.CharField(max_length=100)
content=forms.URLField()

您正在查询字符串
“q1”
,而不是变量
q1

obj = mytable.objects.get(id=q1)
请注意,Python中的行不应以分号结尾

编辑

这是在您发布表单时发生的,而不是在最初的GET上。这是因为在提交表单时GET变量不会被保留

你真的需要回到这方面的基础。在Django中,通过GET参数传递ID不是正确的方法。您应该在URL本身中传递它;内置工具更容易生成,提交时将保留该值

首先,您的
addview
URL需要接受以下参数:

url(r'^add/(?P<id>\d+)/$', views.addview, name='add'),
def addview(request, id):
    obj = mytable.objects.get(id=id)
现在,视图需要接受该参数:

url(r'^add/(?P<id>\d+)/$', views.addview, name='add'),
def addview(request, id):
    obj = mytable.objects.get(id=id)
这将自行解决您的问题,但您还应该进行另一项改进,即使用ModelForm而不是普通表单。更改表格如下:

obj=mytable.objects.get(id='q1')
class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ('info', 'url')
现在你的观点变成:

def addview(request, id):
    obj = mytable.objects.get(id=id)
    if request.method == 'POST':
        form = MyForm(request.POST, instance=obj)
        if form.is_valid():
            form.save()
            return redirect('success')
    else:
        form = MyForm(instance=obj)
    return render(request, 'add/add.html', {'form': form})

你正在尝试的东西是不正确的
a href
用于
GET
请求。如果您单击该链接,它将不会发布任何数据。如果request.method=='post'它也不会进入
条件。然后如果您有一个表单要
post
。然后设置表单属性
action='/add/?q={{mytable.id}'
。然后它将有
request.post
request.GET
(现在).

您最好将django url结构与CBV一起使用,即,
{%url'myapp:my_detail_view'pk=obj.pk%}
试试看,您能发布视图吗?您的方式没有错误。另外,“我试图从id='id'所在的数据库中获取所有对象”不正确,因为,
get
必须包含唯一的文档。否则,请使用
filter
尝试打印
q1
的位置。还有,在我们看来什么是第一季度?@itzmeontv我编辑了这篇文章。现在它包含了我的观点。谢谢,但它不起作用。我已编辑我的问题以包含整个视图。你能查一下吗?但现在你似乎用的是
uid
而不是
id
。是哪一个?请注意,Python中的行也不会以逗号结尾。很抱歉,这是id(再次编辑文章)。它转到/add,但错误为“mytable matching query不存在”。错误显示在此行中:“obj=mytable.objects.get(id=q1)”。我认为q1没有得到q的值。非常感谢!这解决了大部分问题。现在它抛出了一个noreversematch错误。”对于参数为“()”且关键字参数为“{u'id”:u'5caed0'}”的“添加”则相反。尝试了1个模式:[“添加/(?P\\d+/$”]我不知道您为什么将其更改为
,它应该是
。但我不知道你用的是非数字ID。因此模式应该是
r'^add/(?P\w+/$”