有html这3个droplist \ 2按钮,js发送GET 3个变量mar,yer,kpp
function validate() {
var mar = document.forms.form_id.m.value;
var yer = document.forms.form_id.y.value;
var kpp = document.forms.form_id.k.value;
return mar, yer, kpp;
}
</script>
<body style="background: transparent; border: none;">
<form action="/search/" method="get" id="form_id" type="submit" onSubmit="return validate();">
<table>
<tr>
<td style="text-align:center">
<br>
<select id="m">
<option value="">Марка</option>
{% for article in articles %}
<option value="{{ article }}">{{ article }}</option>
{% endfor %}
</select>
</td>
<td style="text-align:center">
<br>
<select id="y">
<option value="">Год выпуска</option>
<option value="2016">2016</option>
</select>
</td>
<td style="text-align:center">
<br>
<select id="k">
<option value="">Коробка передач</option>
<option value="mt">Механика</option>
</select>
</td>
</tr>
<tr>
<td colspan="3" style="text-align:center">
<input type="submit" value="Отправить">
<input type="reset" value="Очистить">
</td>
</tr>
</table>
</form>
</body>
和def
def search(request):
if 'mar' in request.GET and request.GET['mar']:
q = request.GET['mar']
list = AutoParsingMan.objects.filter(marka=q)
return render_to_response('Mysitez/seach.html',
{'list': list, 'querty': q})
else:
return HttpResponse('Please submit a search term.')
为什么不使用这个1变量?(mar)以及如何为3个变量创建def?(mar,yer,kpp)
model.py
class AutoParsingMan(models.Model):
date_ins = models.DateTimeField()
date_change = models.DateTimeField()
change = models.CharField(max_length=15)
date = models.DateTimeField()
date_task = models.DateField()
marka = models.CharField(max_length=50)
year = models.IntegerField()
kpp = models.CharField(max_length=50)
class Meta:
managed = False
db_table = 'auto_parsing_man'
def __str__(self):
return self.marka, self.year, self.kpp
错误 - / search /“'mar'”中的MultiValueDictKeyError
def search(request):
if 'mar' in request.GET and request.GET['mar'] and request.GET['year'] and request.GET['kpp']:
q = request.GET['mar']
y = request.GET['year']
k = request.GET['kpp']
list = AutoParsingMan.objects.filter(marka=q, year=y, kpp=k)
return render_to_response('Mysitez/seach.html',
{'list': list, 'querty': q})
else:
return HttpResponse('Please submit a search term.')
答案 0 :(得分:1)
首先,塞尔丘克是对的,你应该更好地建立你的问题。问题应尽可能客观,而你的问题则很模糊。然而,我可以看到你的问题所在。
您将JavaScript与HTML表单混淆了。它们是两个独立的规范,旨在彼此独立。在构建基于JavaScript的表单之前,您应该首先使用纯HTML构建表单,一旦它起作用,您将在其上添加JavaScript。
对于您的问题,您使用mar
名称作为JavaScript变量名称,HTML表单永远不会发送该名称,因为HTML表单不知道JavaScript变量。相反,您应使用name=
标记上的select
参数,如下所示:
<br>
<select id="m" name="mar">
<option value="">Марка</option>
{% for article in articles %}
<option value="{{ article }}">{{ article }}</option>
{% endfor %}
</select>
</td>
<td style="text-align:center">
<br>
<select id="y" name="yer">
<option value="">Год выпуска</option>
<option value="2016">2016</option>
</select>
</td>
<td style="text-align:center">
<br>
<select id="k" name="kpp">
<option value="">Коробка передач</option>
<option value="mt">Механика</option>
</select>
</td>
HTML表单将发送mar
变量,其中包含从下拉列表中选择的任何文章的选项。
这种代码风格对于学习django和/或Web开发可能是正常的,但在现实世界中,您应该将表单的构造委托给django,通常称为forms.py
。 Django有一个表单引擎,它比模板中的表单硬编码具有更好的兼容性。