2017-07-13 18 views
1

私は、ドロップダウンメニューでユーザーがいくつかの製品を選択し、そのページに基づいて同じページにグラフを表示させたいと考えています。ユーザーは、ドロップダウンメニューからオプションを再度選択/選択解除してからリフレッシュすることができます。そのため、同じページに留まりたいと思います。 My requirement同じhtmlページをdjangoの出力に残してください

私はコードを書いていますが、djangoの別のビューのために、別のURLを持っている必要があります。指定されたURLに移動しているため、ドロップダウンメニューは機能しません。

私は上記を得るためにコンテキストと同じ表示ページをレンダリングしましたが、私のURLは異なります。

私はそれを働かせて、同じURLにとどまることができます。可能であれば、同じページを出力データでリロードしてください。以下は私のコードです。

のindex.html:事前に

<div class="container"> 
    <div class="row"> 
     <div class="col-md-6"> 
      <h3>Select products:</h3> 
      <form id="selectProduct" role="search" method="get" action="{% url 'selectedproducts' %}"> 
       <select name="parameters[]" data-placeholder="Choose products" class="chosen-select" multiple tabindex="4"> 
        {% for p in productnames %} 
         <option value="{{ p.productname }}"> {{ p.productname }} </option> 
        {% endfor %} 
       </select><br/> 
       <label for="submit"></label><button id="submit" type="submit" class="btn btn-default">Submit</button> 
      </form> 
     </div> 
    </div> 
    <div class="row"></div><br /> 
     <h3> Distribution of sales in the products:</h3> 
    </div> 
</div> 
<p>{{ productList }}</p> 

urls.py

url(r'^products/', views.productList, name='index'), 
url(r'^selectedproducts/', views.selectedproducts, name='selectedproducts') 

view.py

def productList(request): 
    productnames = Products.objects.all() 
    context = { 
     'productnames': productnames, 
    } 
    return render(request, 'sales/index.html', context) 

def selectedproducts(request): 
    p = request.GET.getlist('parameters[]') 
    context = { 
     'productList': p, 
    } 
    # --- logic later for chart ------ 
    return render(request, 'sales/index.html', context) 

感謝。 < form id="selectProduct" role="search" method="get" action="{% url 'index' %}"><form id="selectProduct" role="search" method="get" action="{% url 'selectedproducts' %}">変更で

+1

あなたの問題を解決した場合、私に教えてください。ラベルをクリックしてチャートを操作することができます。ホイールを再構築する必要はありません。その他のオプションは次のとおりです:http://www.chartjs.org/samples/latest/ あなたが現在行っているようにしたいのであれば、Ajax/API呼び出しを検索する必要があります。 Ajaxを呼び出すと、他のサイトからリロードせずに情報を取得できます。 – hansTheFranz

+0

参照のおかげで、チャートのみを使用するように計画しています:)現在、私は選択バーと同じページにチャートを表示することに集中していました。 – starFire

答えて

2

def productList(request): 
    if request.method == 'GET': 
     p = request.GET.getlist('parameters[]') 
     k = request.GET('parameters[]') 
     productnames = Products.objects.all() 
     context = { 
      'productList': p, 'productnames': productnames, 'k':k, 
     } 
     # --- logic later for chart ------  
    else: 

     productnames = Products.objects.all() 
     context = { 
      'productnames': productnames, 
     } 

    return render(request, 'sales/index.html', context) 

などの両方の機能を混在させる方法がないだけでは、フォームを表示する場合selectproductで再びフォームを表示し、その後存在し得る場合、これは、同じページに戻ります。 //www.chartjs.org/samples/latest/charts/pie.html:これは編集は私が単にchart.js.httpを使用して、テンプレート

<div class="container"> 
    <div class="row"> 
     <div class="col-md-6"> 
      <h3>Select products:</h3> 
      <form id="selectProduct" role="search" method="get" action="{% url 'selectedproducts' %}"> 
       <select name="parameters[]" data-placeholder="Choose products" class="chosen-select" multiple tabindex="4"> 
        {% for p in productnames %} 
         {% if k == p %} 
          <option value=="{{ p.productname }}" selected> {{ p.productname }} </option> 
         {% else%} 
          <option value="{{ p.productname }}"> {{ p.productname }} </option> 
         {% endif %} 
        {% endfor %} 
       </select><br/> 
       <label for="submit"></label><button id="submit" type="submit" class="btn btn-default">Submit</button> 
      </form> 
     </div> 
    </div> 
    <div class="row"></div><br /> 
     <h3> Distribution of sales in the products:</h3> 
    </div> 
</div> 
<p>{{ productList }}</p> 
+0

これはうまくいって、今日は新しいことを学んだ、ありがとう。:)とにかく、私は選択バーに値を保持することができます、今すぐボックスが再び空白を提出した後。私はいくつかの投稿を見つけましたが、すべてがforms.pyを使っていたのですが、httpの投稿であっても取得できませんでした。 – starFire

+1

答えが好きだった場合は、@starFire – hansTheFranz

+0

を受け入れてupvoteする方法があります。答えがあなたに解決された場合は、時間を与えて投稿します。plsが受け入れてupvoteを受け取ります。 –

関連する問題