Python Django 1.6:从一个模板传递另一个模板的下拉值
我是Django的新手,我试图从索引页面的下拉菜单中获取用户选择的值,并在doclisting页面中使用它。我试图在doclistings页面上打印值,但它似乎没有打印任何内容。我不确定这是否可能。任何帮助都将不胜感激 这里是索引模板,我在这里有一个下拉列表Python Django 1.6:从一个模板传递另一个模板的下拉值,python,django,drop-down-menu,views,Python,Django,Drop Down Menu,Views,我是Django的新手,我试图从索引页面的下拉菜单中获取用户选择的值,并在doclisting页面中使用它。我试图在doclistings页面上打印值,但它似乎没有打印任何内容。我不确定这是否可能。任何帮助都将不胜感激 这里是索引模板,我在这里有一个下拉列表 <div class="signup"> <div class="form-group"> <form action="/doclistings/" method="
<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>
下面是views.py中的doclisting方法
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})
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)
url.py
url(r'^index/$', views.index, name='index'),
url(r'^doclistings/$', views.doclistings, name='doclistings'),
如果没有模型,可以使用django会话来实现 假设您需要基于数据库的会话(Django还提供基于文件的会话和基于缓存的会话): 初始设置完成后,您可以在视图中使用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对象执行的其他操作,请参见。如果没有模型,可以使用django会话来实现 假设您需要基于数据库的会话(Django还提供基于文件的会话和基于缓存的会话): 初始设置完成后,您可以在视图中使用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对象执行的其他操作,请参见。首先,有些操作是以困难/错误的方式执行的
- 不要自己呈现字段,在模板中使用
李>{{form.as_p}}
- 表单的方法不应该是
,这是在数据库中更改内容时使用的方法。你应该使用POST
GET
- 不要硬编码重定向中的URL等,将它们解耦。您正在使用,因此在代码中输入名称以获取url
- 使用命名组从您重定向到的url捕获参数,例如:
,您的函数也将获得url(r'^doclistings/(?P\w+/$),views.doclistings,name='doclistings')
参数(您应该将其添加到函数signaure中)。另一个选项是将其作为组名
paramGET
传递,并在函数中使用request.GET检查您是否拥有该组,如果有,则进一步筛选/doclistings?group=xyz
和索引
是函数,而不是方法文档列表
- 您应该使用基于类的通用视图,如和,这将删除您在此处使用的样板文件
HTH首先,有些事情你做得很艰难/错误
- 不要自己呈现字段,在模板中使用
李>{{form.as_p}}
- 表单的方法不应该是
,这是在数据库中更改内容时使用的方法。你应该使用POST
GET
- 不要硬编码重定向中的URL等,将它们解耦。您正在使用,因此在代码中输入名称以获取url
- 使用命名组从您重定向到的url捕获参数,例如:
,您的函数也将获得url(r'^doclistings/(?P\w+/$),views.doclistings,name='doclistings')
参数(您应该将其添加到函数signaure中)。另一个选项是将其作为组名
paramGET
传递,并在函数中使用request.GET检查您是否拥有该组,如果有,则进一步筛选/doclistings?group=xyz
和索引
是函数,而不是方法文档列表
- 您应该使用基于类的通用视图,如和,这将删除您在此处使用的样板文件
HTH你能给我看一下url.py文件和DropdownSelectionForm模型吗?我已经添加了url.py和表单,但是你正在将一些东西
selection.save()
保存到数据库中。型号名称是什么。我实际上没有将所选内容保存到数据库中。我不知道我为什么把它放在那里。我只是想让它工作。你能给我看看url.py文件和DropdownSelectionForm模型吗?我已经添加了url.py和表单,但是你正在将一些selection.save()
保存到数据库中。型号名称是什么。我实际上没有将所选内容保存到数据库中。我不知道我为什么把它放在那里。我只是想让它工作。我在line print request(行打印请求)中得到keyerror选择。session[“selection”]尝试以这种方式打印,print request.session.get(“selection”,None)
这会给我一个未定义的错误。我在上面的视图中做了一些更改,以打印出选择值。但它打印的值是“无”。所以它没有保存下拉菜单中的值。知道为什么不保存吗?将此更改为
它工作了!!!非常感谢您的大力帮助和不断的思考。我在行打印请求中得到了keyerror选择。会话[“选择”]尝试以这种方式打印,print request.session.get(“选择”,无)
这将给我一个未定义的无错误。我在上面的视图中做了一些更改,以打印出选择值。但它打印的值是“无”。所以它没有保存下拉菜单中的值。知道为什么不保存吗?将此更改为
它工作了!!!我非常感谢你的巨大帮助和不断的思考。我的表单只在POST上工作,我试着输入GET,我得到了多值DICKEKEY错误我的表单只在POST上工作,我试着输入GET,我得到了多值DICKEKEY错误