django:在同一页面中输入并显示输出 [英] django: taking input and showing output in the same page
问题描述
我有一个
ModelForm
为以下型号: 类查询(models.Model):
user_id = models.CharField(max_length = 200)
query = models.CharField(max_length = 200)
我向用户展示了一个简单的表单,可以帮助您执行以下操作:
- 用户将提出问题
-
该问题将被处理(根据问题将生成一个数据库查询
) -
然后查询结果应该显示在
相同页面的下方。
这是我的views.py的样子:
from django.http import HttpResponse
从django.shortcuts导入get_object_or_404,从basicapp.models导入的
导入QueryForm
def index(request):
form = MyForm()
real_form = form.getForm(request)
response = form.response
return render(reques t,'basicapp / index.html',{
'form':real_form,
'response':response,
})
class MyForm:
response = '
def getForm(self,request):
form = QueryForm(request.POST)
如果form.is_valid():
response = form.cleaned_data ['query' ]
form.save()
返回表单
现在我正在尝试简单的东西,我正在使用表单的查询字段中的值,并尝试将其发送回页面;到目前为止我失败了。
这是index.html:
< form action =method =post> {% csrf_token%}
{{form}}
< p> {{response}}< / p>
< input type =submitvalue =提交/>
< / form>
如果我可以这样做,我认为查询的东西不会那么难。表单正常工作数据被保存在数据库中。只有响应
字符串从 views.py
无法在 index.html
表单提交后。您可以帮忙吗?
编辑:
根据Hoff的回答,尝试追踪 index.html
< form id =myFormaction =method =get> {%csrf_token%}
{{form}}
< input type =submitvalue =提交/>
< / form>
< div id =response>
< / div>
< script language =JavaScript>
$(document).ready(function(){
$(#myForm)。submit(function(){//捕获表单的提交事件
$ .ajax({/ /创建一个AJAX调用...
数据:$(this).serialize(),//获取表单数据
类型:$(this).attr('GET'),
成功:function(response){// on success ..
$(#response)。html(response); //更新DIV
}
});
return false;
});
});
< / script>
仍然没有运气:(
views.py
def index(request):
questions = None
如果request.GET.get('search'):
search = request.GET.get('search')
questions = Queries.objects.filter
name = request.GET.get('name')
query = Queries.object.create(query = search,user_id = name)
查询。 save()
return render(request,'basicapp / index.html',{
'questions':questions,
})
html
< form method =GET>
问题:< input type =textname =search>< br />
名称:< input type = textname =name>< br />
< input type =submitvalue =Submit/>
< / form>< br /> ;< br />
{%for问题中的问题%}
< p> {{question}}< / p>
{%endfor%}
I am quite new to django and struggling to do something very simple.
I have a ModelForm
for the following model:
class Queries(models.Model):
user_id=models.CharField(max_length=200)
query=models.CharField(max_length=200)
And I am showing the user a simple form that will help in doing the following:
- user will ask a question
The question will be processed(a database query will be generated based on the question)
Then the query result should be shown just beneath the form in the same page.
This is how my views.py looks like:
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from basicapp.models import QueryForm
def index(request):
form=MyForm()
real_form=form.getForm(request)
response=form.response
return render(request,'basicapp/index.html',{
'form': real_form,
'response':response,
})
class MyForm:
response=''
def getForm(self,request):
form = QueryForm(request.POST)
if form.is_valid():
response=form.cleaned_data['query']
form.save()
return form
For now I am trying simple stuffs,I am taking the value in query field of the form and trying to send it back to the page;so far I am failed. This is index.html:
<form action=" " method="post">{% csrf_token %}
{{ form }}
<p>{{response}}</p>
<input type="submit" value="Submit" />
</form>
If I could do this,I think the query stuffs wont be that tough.The form is working fine,the datas are getting saved in database. Only the response
string from views.py
could not be retrieved inside index.html
after form submission. Can you please help?
EDIT:
Tried following in index.html
based on Hoff's answer:
<form id="myForm" action=" " method="get">{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
<div id="response">
</div>
<script language="JavaScript">
$(document).ready(function() {
$("#myForm").submit(function() { // catch the form's submit event
$.ajax({ // create an AJAX call...
data: $(this).serialize(), // get the form data
type: $(this).attr('GET'),
success: function(response) { // on success..
$("#response").html(response); // update the DIV
}
});
return false;
});
});
</script>
Still no luck :(
views.py
def index(request):
questions=None
if request.GET.get('search'):
search = request.GET.get('search')
questions = Queries.objects.filter(query__icontains=search)
name = request.GET.get('name')
query = Queries.object.create(query=search, user_id=name)
query.save()
return render(request, 'basicapp/index.html',{
'questions': questions,
})
html
<form method="GET">
Question: <input type="text" name="search"><br/>
Name: <input type="text" name="name"><br/>
<input type="submit" value="Submit" />
</form><br/><br/>
{% for question in questions %}
<p>{{question}}</p>
{% endfor %}
这篇关于django:在同一页面中输入并显示输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!