【问题标题】:Django 1.6 Pass dropdown selection value to another templateDjango 1.6 将下拉选择值传递给另一个模板
【发布时间】:2014-06-12 08:47:12
【问题描述】:

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

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

 <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)

urls.py

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

forms.py

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

【问题讨论】:

    标签: python html django


    【解决方案1】:

    这里有很多问题。

    主要是你的&lt;select&gt;标签中没有包含name属性,所以你的浏览器根本不会发送数据,request.POST会是空的。

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

    但是,您又遇到了一个问题:您正在视图中创建 form 变量,但您从未将变量发送到模板上下文。您缺少render 的第三个参数,即模板变量字典:

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

    您在doclistings 中遇到了同样的问题:您正在兴高采烈地建立一个字典d,其中包含您想在模板中使用的所有变量,但实际上从未将它们传递给该模板。同样,调用应该是:

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

    【讨论】:

    • 您好,感谢您的帮助。你能澄清一下关于有表格的第二句话吗?我有一个上面列出的表格。我不确定如何将 html 下拉表单放入 forms.py 中?
    • docs.djangoproject.com/en/1.6/ref/forms/fields/#choicefield - 我假设您已经在使用它,否则您的表单毫无意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2021-06-30
    相关资源
    最近更新 更多