Django:从下拉列表中选择元素后,如何执行操作

时间:2019-05-20 18:49:31

标签: python django

我想从下拉列表中选择选项,然后根据所选元素转到我的数据库文件CSV,显示与该所选元素相关的结果。

my HTML code:
 {% extends "base.html"%}
{%block body%}
{% load static %}
<section>
    <h2 align ="center" margin = 10px>  Selecting parameters </h2>
        <div>
            <form align = 'center' method ="post" action=" help to describe this action url where to direct ?"  >
                {%csrf_token%}

             <label class="label">Generators</label>
             <select id = "myList" onchange="this.form.submit()">
                {% for name in generator %}
               <option> {{name}}</option>
               {%empty%}
               <option> no list found </option>
               {%endfor%}


             </select>

        </div>
    <div>
    <button type="submit" class="myButton"> submit </button>
    </div>
    </form>

  <textarea>{{selected_generator}}</textarea>


</section>


<footer id="main-footer"> <p> Copyright &2019; polito interdispilinary group 2019</p>

</footer>

{%endblock%}

</body>
</html>

Views.py 

def generator(request):

    file = pd.read_csv("G:/interdispilinary project/Website/resources/generator/up_op_zone.csv")
    df = pd.DataFrame(file)
    generator= df['generator']
    operator = df['operator']
    zone = df['zone']
    return render(request, 'generator.html',{'generator':generator})


def gen_results(request):
    if request.method =='POST':
        user_submit = gen_form(request.POST)
        print(request.POST)
        if user_submit.is_valid():
            print(user_submit)
            selected_generator = user_submit.cleaned_data['generator']
            request.session['selected_generator'] = selected_generator
        df = pd.read_csv("G:/interdispilinary project/Website/resources/generator/up_op_zone.csv",names=["generator","operator","zone"])
        df1 = df[df["generator"]==selected_generator][["operator","zone"]]
        return render(request, 'generator.html',{'selected_generator':selected_generator})


url.py

urlpatterns = [
    url(r'^$', views.homepage, name='homepage'),
    url(r'^generator', views.get, name='generator_url'),
    url(r'^gen_results', views.gen_results, name='gen_results_url'),

    url(r'^market', views.market, name='market_url'),
    url(r'^operator', views.operator, name='operator_url'),

当我单击提交按钮时,必须将结果保存到会话中,然后根据gen_result函数,它应该再次呈现页面

1 个答案:

答案 0 :(得分:0)

action=" help to describe this action url where to direct ?"

我认为这应该是(并且尝试此操作时您可能仍会收到错误):

action="{% url 'gen_results' %}"

在您的urls.py中:

url(r'^generator', views.get, name='generator_url'),

也许应该指向views.generator?

但是这些可能不是您gen_results视图返回“ None”的原因。我将开始调试'gen_results'是否返回任何东西。如果render()失败,或者URL映射到一个无效的视图,您将收到另一个错误-该错误是views.gen_results永远不会到达其“ return”语句:

if request.method == 'POST': # ... as you have it else: print('actual method=', request.method)

好运。

编辑:关于表单的更多信息

(很抱歉,如果您已经了解表格的全部信息)

大概在forms.py中,您有类似的东西:

class GenForm(forms.Form): fields = forms.ChoiceField(choices=[(index,generator_name)])

'choices'参数需要一个2元组的列表;我认为您当前在模板中仅包含名称。我不确定,但我认为第一个字段旨在表示主键或代码,而第二个字段更多是“ display_name”。对您来说,这样做可能更容易(generator_name,generator_name)

要将表单用于GET和POST,您的视图(生成器)应创建gen_form并设置其选择的值:

generator_list=[(generator,generator) for generator in generators] gen_form = GenForm(choices=generator_list)

然后将其传递给模板:

return render(request, 'template', {'gen_form':gen_form})

然后将其渲染为“简化的”,例如(尚未检查此html,因此提交按钮可能不太正确,抱歉):

<form method="post" action="{% url gen_results %}">
{{ csrf_token }}
<p>Please select which generator you're interested in:</p>
{{ gen_form }}
<input type="submit">Submit</input>
</form>

或者,您不能在任何地方使用Django表单API,而只能从request.POST获取提交的生成器名称(一旦确定了它的名称)(在print(request.POST)中戳一下)。如果表单或字段的ID为'generator_name',则request.POST ['generator_name']应返回选择的字符串。