Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 1.6:从一个模板传递另一个模板的下拉值_Python_Django_Drop Down Menu_Views - Fatal编程技术网

Python Django 1.6:从一个模板传递另一个模板的下拉值

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="

我是Django的新手,我试图从索引页面的下拉菜单中获取用户选择的值,并在doclisting页面中使用它。我试图在doclistings页面上打印值,但它似乎没有打印任何内容。我不确定这是否可能。任何帮助都将不胜感激

这里是索引模板,我在这里有一个下拉列表

<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中)。另一个选项是将其作为
    GET
    param
    /doclistings?group=xyz
    传递,并在函数中使用request.GET检查您是否拥有该组,如果有,则进一步筛选
还有一些挑剔的建议:

  • 索引
    文档列表
    是函数,而不是方法
  • 您应该使用基于类的通用视图,如和,这将删除您在此处使用的样板文件

HTH

首先,有些事情你做得很艰难/错误

  • 不要自己呈现字段,在模板中使用
    {{form.as_p}}
  • 表单的方法不应该是
    POST
    ,这是在数据库中更改内容时使用的方法。你应该使用
    GET
  • 不要硬编码重定向中的URL等,将它们解耦。您正在使用,因此在代码中输入名称以获取url
  • 使用命名组从您重定向到的url捕获参数,例如:
    url(r'^doclistings/(?P\w+/$),views.doclistings,name='doclistings')
    ,您的函数也将获得
    组名
    参数(您应该将其添加到函数signaure中)。另一个选项是将其作为
    GET
    param
    /doclistings?group=xyz
    传递,并在函数中使用request.GET检查您是否拥有该组,如果有,则进一步筛选
还有一些挑剔的建议:

  • 索引
    文档列表
    是函数,而不是方法
  • 您应该使用基于类的通用视图,如和,这将删除您在此处使用的样板文件


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错误