2017-01-12 65 views
0

我想準備一個簡單的用戶界面。在點擊提交按鈕時,用戶將從下拉菜單中選擇roboid,他應該使用其他API URL獲取機器人詳細信息。如果我硬編碼roboid我得到的結果。但我的疑問是如何將值從下拉列表傳遞到URL。以及如何在同一窗口中以表格形式顯示該json。如何將值從下拉列表傳遞到django中的URL

這裏是我的代碼:

Views.py

from django.shortcuts import render 
from django.http import HttpResponseRedirect 
import ast 
from django.http import HttpResponse 
import requests 
from .form import NameForm 

def get_name(request): 
    # if this is a POST request we need to process the form data 
    title = 'welcome' 
    k = {} 
    form = NameForm(request.POST or None) 
    context = { 
     "form": form, "title": title, "roboid": 2} 
    if form.is_valid(): 

     robotid = request.POST.get('roboid', '') 
     print robotid 

     resp = requests.get('https://r0p1i0hwdh.execute-api.us-west-2.amazonaws.com/testhp/?roboid=%s' % robotid) 
     l = ast.literal_eval(resp.content) 
     di = ast.literal_eval("".join(map(str, l))) 
     for k, v in di.iteritems(): 
      items = "{:<25} {:<50}".format(k, v) 
     context = { 
      "robotid": robotid} 

    return render(request, "name.html", context) 

name.html 類:

< !DOCTYPE html > 
< html 

<head> 

</head > 
< body bgcolor = "#f5f5dc" > 
<center> 
<h1 > {{title}} </h1 > 

< form 
method = "get" 
action = "" > 
{ % csrf_token %} 
{{form.as_p}} 

<script> 
var 
z = "https://bvdruneuqc.execute-api.us-west-2.amazonaws.com/test/my-resource1?roboid=5" 
</script > 
< input 
type = "submit" 
value = "Submit" 
style = "float: none " 
onclick = "window.open(z)"/> 
< input 
type = "RESET" 
value = "cancel" > 
{{items}} 

</form ></center > 
</body ></html > 

form.py

from django import forms 

class NameForm(forms.Form): 
roboid = forms.ChoiceField(label='RobotID',choices=[(x, x) for x in   range(1, 10)],required='TRUE',) 

我知道有更多t o在代碼中修改。 但是,請幫助我們,這對我來說很重要。

+0

請修復您的模板的格式,這是不可讀的。 –

+0

而且,呃。你爲什麼用'literal_eval''解析JSON? –

+0

對不起,還....我不知道如何再次添加代碼。這是我第一次發佈關於該文字eval的問題 – Smily

回答

0

其實你的問題並不清楚。所以,我回復了我從您的查詢中瞭解的內容。

變化從表單方法得到name.html,以便它可以發送請求到您的視圖,並可以使用request.POST驗證形式。

而jquery被添加到獲得選定的roboid並在URL中追加。 您還可以在下面評論的API中附加選定的roboid。你可以根據你的需要使用。

name.html

<!DOCTYPE html> 
<html> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
</head> 

<body bgcolor="#f5f5dc"> 
    <center> 
     <h1> {{title}} </h1> 
     <form method="post" action=""> 
      {% csrf_token %} 
      {{form.as_p}} 
      <script> 
       var z = "https://bvdruneuqc.execute-api.us-west-2.amazonaws.com/test/my-resource1"; 

       $(document).on('click', 'input[type="submit"]', function(e){ 
        e.preventDefault(); 
        var roboid = $("#id_roboid option:selected").val(); 
        $('form').attr('action', "?roboid=" + roboid).submit(); 

        // var new_z = z + "?roboid=" + roboid; 
        // window.open(new_z); 
       }); 
      </script> 
      <input type="submit" value="Submit" style="float:none" /> 
      <input type="RESET" value="cancel"> {{items}} 
     </form> 
    </center> 
</body> 

</html> 

在view.py因爲roboid通過在URL發送追加因此它可以從request.GET中

views.py

def get_name(request): 
    # if this is a POST request we need to process the form data 
    title = 'welcome' 
    k = {} 
    form = NameForm(request.POST or None) 
    context = { 
     "form": form, "title": title, "roboid": 2} 
    if form.is_valid(): 

     robotid = request.GET.get('roboid', '') 
     print ('robotid', robotid) 

     resp = requests.get('https://r0p1i0hwdh.execute-api.us-west-2.amazonaws.com/testhp/?roboid=%s' % robotid) 
     l = ast.literal_eval(resp.content) 
     di = ast.literal_eval("".join(map(str, l))) 
     for k, v in di.iteritems(): 
      items = "{:<25} {:<50}".format(k, v) 
     context = { 
      "robotid": robotid} 

    return render(request, "name.html", context) 

以及如何以同樣的w表格形式顯示該json indow。 爲此,您可以提供數據,即您想要在窗口和變量中顯示的json格式的簡短示例。因爲現在項目 valriable不會在上下文的任何位置添加,因此無法在name.html中訪問

+0

嗨阿希什,感謝您的幫助。在這裏我提供我的示例json數據:[ { 「書ID」:「1」, 「Book Name」:「Computer Architecture」, 「Category」:「Computers」, 「Price」:「125。60「 }] – Smily

+0

Hi Ashish您能告訴我如何將多個值傳遞給URL(多個id) – Smily

相關問題