2017-01-12 24 views
0

私は簡単なUIを準備しようとしています。送信ボタンをクリックするとドロップダウンからroboidを選択するユーザーは、残りのAPI URLを使用してロボットの詳細を取得する必要があります。 roboidをハードコードすると結果が表示されます。しかし、ここでの疑問は、ドロップダウンから値をURLに渡す方法です。そして、そのウィンドウを同じウィンドウで表形式で表示する方法。ここで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) 

名.html クラスA:

< !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',) 

私が知っていますもっとたくさんあるoコード内で修正する。 しかし、私を助けてください、それは私にとって重要なものです。

+0

テンプレートの書式を修正することはできません。 –

+0

そして、 JSONを解析するのになぜ 'literal_eval''を使用していますか? –

+0

これも申し訳ありません....私はコードを再入力する方法はわかりません。質問を投稿したのは初めてです。 – Smily

答えて

0

実際、あなたの質問は正しくはっきりしません。だから、私はあなたの質問から私が理解していることに答えています。 からフォームのメソッドがそう、それはあなたのビューにリクエストを送信することができ、フォームがrequest.POSTを使って検証することができることを名.html でポストにし得る

変更。

jqueryは、選択されたロボイドを取得してURLに追加するために追加されます。 また、選択したロボイドをAPIに追加することもできます。これは下記のコメントです。必要に応じて使用することができます。 view.pyで

名.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> 

それはrequest.GET

views.py

から取り出すことができるようroboidはURLに付加することによって送信されるので、
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) 

このjsonを表形式で同じwで表示する方法indow。 これはデータを提供することができます。つまり、使用しているウィンドウや変数に表示するjson形式の短い例です。今のところはアイテム valriableは文脈のどこにも追加されていないので、name.htmlにアクセスすることはできません。

+0

こんにちは、Ashishさん、 "Book Name": "Computer Architecture"、 "カテゴリ": "コンピュータ"、 "Price": "125。60 " } – Smily

+0

こんにちはAshishあなたはURLに複数の値を渡す方法を教えてください。(複数のID) – Smily

関連する問題