python - Django 1.6 将下拉选择值传递给另一个模板

标签 python html django

我试图显示用户从index.html 页面选择的doclistings.html 模板中的值。我似乎无法打印该值,也没有收到任何错误。我认为值(value)没有被存储。

这是带有我要存储的下拉值的索引页。

 <div class="signup">
      <div class="form-group">
        <form action="/doclistings/" method="post">
        <select class="form-control" id="select" name="spec">
          <option><b>Choose a Speciality...</b></option>
          <option value ="Dermatologist">Dermatologist</option>
          <option value = "Dentist">Dentist</option>
          <option value = "ENT">Ear, Nose and Throat (ENT)</option>
          <option value = "Opthalmologist">Eye Doctor</option>
          <option value = "Psychiatrist">Psychiatrist</option>
          <option value = "Orthopedist">Orthopedist</option>
        </select>
        <span class="input-group-btn">
          <button class="btn btn-primary" type="submit"  name="submit" id="ss-submit">Find Doctors</button>
        </span>
      </div>
    </div>

我希望用户选择下拉值并点击提交。然后,用户应该被引导至文档列表页面,页面顶部打印有值。提交按钮确实会将其带到文档列表,但它不会打印该值。

这是我试图在其中显示值的 doclistings.html 模板

{{value}}

这是我的观点.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[{{ form.value }}]
            selection.save()

            return HttpResponseRedirect('/doclistings', {{ form.value }})
    else:
        form = DropdownSelectionForm()

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

@csrf_exempt
def doclistings(request):
    d = getVariables(request)
    doctors = Doctor.objects.all()
    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)

url.py

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

表单.py

class DropdownSelectionForm(forms.Form):
    selection = forms.CharField()

最佳答案

你这里有很多问题。

最主要的是你没有包含 name <select> 中的属性标记,因此您的浏览器根本不会发送数据,并且 request.POST将是空的。

但是,您有一个表单,因此您应该首先使用它来显示数据 - 而不是在 HTML 中手动列出选择及其选项,您应该只执行 {{ form.value }} .

但是,你又遇到了一个问题:你正在创建 form View 中的变量,但您永远不会将该变量发送到模板上下文。您缺少 render 的第三个参数,这是模板变量的字典:

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

您在 doclistings 中遇到同样的问题:你正在愉快地建立一本字典,d ,您想要在模板中使用的所有变量,但实际上从未将它们传递给该模板。同样,调用应该是:

return render(request, 'meddy1/doclistings.html', d)

关于python - Django 1.6 将下拉选择值传递给另一个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24180061/

相关文章:

python - 如何在多线程或多处理中运行脚本

html - 与其将 Lightbox 置于一切之上,不如将其置于相对位置并将一切向下推

django - 允许多个用户加入聊天室(使用 Django、Socket.io 和 node.js)

python - 如何打乱列表中的顺序?

python - 加载 YAML 保留顺序

python - 更改 session cookie的超时时间是否存在安全风险?

python - 根据之前的标签使用 BeautifulSoup 解析 HTML

javascript - 单击按钮显示/隐藏 colspan 特定行

python - 用于循环的 Django 模板

python - 如何使用 django.test.TestCase 断言异常?