2014-06-19 33 views
0

我對Django非常陌生,試圖從用戶從索引頁上的下拉菜單中選擇值,並將其用於doclisting頁面。我試圖在doclistings頁面上打印該值,但似乎沒有打印任何內容。我不確定這是否可行。任何幫助將非常感激。Django 1.6:將一個模板的下拉值傳遞給另一個

這裏是指數模板在那裏我已經下拉形式

<div class="signup"> 
      <div class="form-group"> 
      <form action="/doclistings/" method="post" >{% csrf_token %} 
      <select class="form-control" id="s1" name="selection"> 
       <option><b>Find a Doctor...</b></option> 
       {% for value, text in form.selection.field.choices %} 
       <option value="{{ value }}">{{ text }}</option> 
       {% endfor %} 
      </select> 
<button class="btn btn-primary" type="submit" name="submit" id="ss-submit">Find Doctors</button> 

這裏doclisting這裏我想從選擇

<h2>{{selection}}</h2> 

這裏打印量模板是索引方法views.py

def index(request): 
    d = getVariables(request,dictionary={'page_name': "Home"}) 
    if request.method == "POST": 
     form = DropdownSelectionForm(request.POST) 

     if form.is_valid(): 
      selection = form.cleaned_data['selection'] 

      return HttpResponseRedirect('/doclistings', 'selection') 
    else: 
     form = DropdownSelectionForm() 

    return render(request, 'meddy1/index.html', {'form': form}) 

這裏是在views.py中的文檔化方法

def doclistings(request): 
    d = getVariables(request) 
    doctors = Doctor.objects.all().order_by('-likes') 
    paginator = Paginator(doctors, 20) #Show 20 doctors per page 
    page = page = request.GET.get('page') 
    try: 
     doctors = paginator.page(page) 
    except PageNotAnInteger: 
     doctors = paginator.page(1) 
    except EmptyPage: 
     doctors = paginator.page(paginator.num_pages) 
    d['doctors'] = doctors 
    d['paginator'] = paginator 

    return render_to_response('meddy1/doclistings.html',d) 

forms.py

MY_CHOICES = (
    ('Dermatologist', 'Dermatologist'), 
    ('Dentist', 'Dentist'), 
    ('Opthalmologist', 'Opthalmologist'), 
) 

class DropdownSelectionForm(forms.Form): 
    selection = forms.ChoiceField(choices=MY_CHOICES, widget = forms.Select) 

urls.py

url(r'^index/$', views.index, name='index'), 
url(r'^doclistings/$', views.doclistings, name='doclistings'), 
+0

你能告訴我的urls.py文件,並DropdownSelectionForm模式? – dhana

+0

我已經添加了urls.py和表格 –

+0

,但是您將'selection.save()'保存到數據庫中。什麼是型號名稱。 – dhana

回答

2

如果你還沒有模型,你可以做到這一點使用Django會議,

假設你想要數據庫(Django還提供基於文件的會話和基於緩存的會話):

Open settings.py and find MIDDLEWARE_CLASSES. Add 'django.contrib.sessions.middleware.SessionMiddleware' to the list. 
Find INSTALLED_APPS in the same file and add 'django.contrib.sessions' there. 
Run manage.py syncdb from the command line. 

初始設置後,您可以在視圖中使用request.session在請求之間存儲信息。

def index(request): 
    d = getVariables(request,dictionary={'page_name': "Home"}) 
    if request.method == "POST": 
     form = DropdownSelectionForm(request.POST) 

     if form.is_valid(): 
      selection = form.cleaned_data['selection'] 
      request.session["selection"] = request.POST['selection'] 

      return HttpResponseRedirect('/doclistings') 
    else: 
     form = DropdownSelectionForm() 

    return render(request, 'meddy1/index.html', {'form': form}) 

在查看文檔列表,

def doclistings(request): 
    d = getVariables(request) 
    doctors = Doctor.objects.all().order_by('-likes') 
    paginator = Paginator(doctors, 20) #Show 20 doctors per page 
    page = page = request.GET.get('page') 
    print request.session["selection"] 
    try: 
     doctors = paginator.page(page) 
    except PageNotAnInteger: 
     doctors = paginator.page(1) 
    except EmptyPage: 
     doctors = paginator.page(paginator.num_pages) 
    d['doctors'] = doctors 
    d['paginator'] = paginator 

    return render_to_response('meddy1/doclistings.html',d) 

對於其他的東西,你可以用的request.session對象確實看到了documentation

+0

我在線打印request.session得到keyerror選擇[「選擇」] –

+0

嘗試打印這種方式,'print request.session.get(「selection」,None)' – dhana

+0

這會給我一個沒有定義的錯誤。我在視圖中做了一些更改以打印出選擇值。但它打印的價值是「無」。所以它不會保存下拉菜單中的值。任何想法爲什麼它不存儲? –

2

首先,你正在做一些硬/錯的方式。

  • 不要在模板中自己渲染字段Django forms can render the widgets,使用{{form.as_p}}
  • 您的表單的方法不應該是POST,它在db中更改時使用。你應該使用GET
  • 不要在重定向等硬編碼的URL解耦它們。您正在使用named url patterns,因此請在您的代碼reverse中獲取網址的名稱。
  • 使用命名組捕獲您要重定向到的URL的參數,例如: url(r'^doclistings/(?P<group_name>\w+)/$', views.doclistings, name='doclistings'),您的函數也將獲得group_name參數(您應該將其添加到函數標誌中)。另一個選擇是將它作爲GET參數/doclistings?group=xyz並在你的函數中使用request.GET來檢查你是否有組,如果有,進一步過濾。

一些更挑剔,諮詢:

  • indexdoclisting是功能,而不是方法。
  • 您應該使用通用的基於類的視圖,如FormViewListView,它們會刪除您在此處使用的樣板。

HTH

+0

我的表單只適用於POST,我試着把GET並且我得到MultiValueDicketKey錯誤 –

相關問題