2013-06-28 10 views
1

我正在尝试为数据库提供搜索功能。三种不同的选择或化学气体和供应。如何使用Django在views.py中引用单选按钮或者我是否关闭?

<form action="/search/" method="get"> <input name="q" type="text"> 
<input value="Search" type="submit"> 
<input value="Chemicals" form="radiobuttons" name="item" type="radio">Chemicals&nbsp;  
<input value="Gases" form="radiobuttons" name="item" type="radio">Gases&nbsp; 
<input value="Supplies" form="radiobuttons" name="item" type="radio">Supplies </form> 

这是我正在使用的html。搜索功能的工作原理应该如此,但我必须引用下面发布的视图中错误的单选按钮。

def search(request): 
    error = False 
    item = request.GET['item'] 
    if 'item' in request.GET and request.GET['item']: 
     item = request.GET['item'] 
     if not item: 
      error = True 
    if 'q' in request.GET and request.GET['q']: 
     q = request.GET['q'] 
     if not q: 
      error = True 
     elif len(q) > 20: 
      error = True 
     else: 
      if item == 'Chemicals': 
       chemicals = Chemicals.objects.filter(Name__icontains=q) 
       records = ChemicalRecord.objects.all() 
       recordform = ChemicalRecordForm 
      return render_to_response('search_results.html',locals(), context_instance=RequestContext(request)) 
    return render_to_response('search_form.html',{'error':True}) 

感谢您的任何提示,建议,见解或答案。

class RadioSelection(forms.Form): 
CHOICES = (
    ('Chemicals','Chemicals'), 
    ('Gasses','Gasses'), 
    ('Supplies','Supplies'), 
) 
Button = forms.RadioSelect(choices=CHOICES) 

,并在HTML我尝试使用称之为{{form.Button}}这就是另一个用户已经张贴在那是在radibuttons另一个问题。没有显示出来,它验证correclty(所以它说),所以我不知道如果HTML是错误的,或者如果表单构建不正确,谢谢。

+1

你为什么要手动声明它?你可以做'{{recordform | safe}}' – karthikr

+0

我可以吗?对不起,我对django/python很陌生。这对我来说都是相当新的。那么究竟会做什么呢? 刚刚在django网站上找到了单选按钮文档,但不胜感激您提供的任何帮助或见解。 – user2482595

+0

你是说'request.GET ['item']'为空? –

回答

3

考虑使用django forms api。它会让你的生活变得更简单,因为它可以包括验证,数据清理,可重复使用的代码等。

问题已更新,现在更多的代码已更改。

您需要在您的视图方法中实例化您的表单,然后将其传递给模板。像

def search(request) 
    ... 
    form = RadioSelection() 
    ... 

    render_to_response('search_results.html', {'form': form, ... }, context_instance=RequestContext(request)) 

然后在你的模板,你可以只用{{form.as_p}}

画整个窗体顺便说一句,我会避免使用当地人()将参数传递到您的模板......干净,肯定的,但关于你的模板到底有什么可用,这一点并不明显。

+0

我现在正在检查此问题,稍后再编辑回来。谢谢 – user2482595

+0

我认为这是要走的路,但对于如何在页面上显示表单有点困惑?我将编辑我拥有的内容,也许有人可以填补我的空间。 – user2482595

2

虽然窗体框架是要走的路,但您的直接问题是您的单选按钮没有任何一个value属性。

+0

这是通过formy.py/views.py还是html完成的? – user2482595

+0

通常情况下,如果您使用forms.py中定义的表单,它会自动完成,但如果您选择不需要,则需要将其添加到HTML中。 –

相关问题