1

ユーザーがサイトにアクセスし、位置データを含むフォームを送信してデータベース エントリを絞り込み、その情報に基づいてプロットを表示できるようにするアプリケーションを取得しようとしています。ユーザーはインデックス ページにアクセスするだけでよく、送信ボタンをクリックするとフォームの下にプロットが表示されます。内部的には、テンプレートにはプロット ビューへの呼び出しがあり、要求からの情報を使用してデータをフィルター処理し、.png を返します。インデックス テンプレートの内部には、次のものがあります。

<form action='.' method="get">
    State: <input type="text" name="State">
    ZIP: <input type="text" name="Zip">
    City: <input type="text" name="City">
    <input type="submit" value="submit">
</form>
<img src='plot.png?State={{ request.GET.State }}&Zip={{ request.GET.Zip }}&City={{ request.GET.City }}'>

タグをハードコーディングすると、次のようになります。

<img src='plot.png?State=FL&Zip=&City=MIAMI'>

うまく機能しますが、フォームのリクエストからすぐ下のタグに情報を送信するフォームを取得できません。代わりに、フォームがプロット ビュー自体を指すようにすることもできますが、その場合、ページは望ましくない画像だけに移動します。これを修正するにはどうすればよいですか?

編集: urls.py と views.py が含まれていないことをお詫びします。

urls.py

urlpatterns = patterns('',
                   url(r'^$','grapher.views.index', name='index',),
                   url(r'^plot.png$', 'grapher.views.plot', name='plot'),
)

ビュー.py

def index(request):
    states = ['AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA', 'HI', 'ID',
              'IL', 'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS',
              'MO', 'MT', 'NE', 'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK',
              'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV',
              'WI', 'WY']
    context = RequestContext(request,{'states': states})
    return render(request, 'grapher/index.html', context)



def plot(request):
    data = scoreData.objects.all()
    state = request.GET.get('State','')
    postal = request.GET.get('Zip','')
    city = request.GET.get('City','')
    if state != '':
        data = data.filter(state=state)
    elif postal != '':
        data = data.filter(postal=postal)
    elif city != '':
        data = data.filter(city=city)
    cleanedData = []
    for score in data:
        cleanedData.append(score.score)
    fig = Figure()
    ax = fig.add_subplot(1,1,1)
    ax.hist(cleanedData,100)
    canvas = FigureCanvas(fig)
    response = HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response
4

1 に答える 1