ボタンクリック時にDjango関数を呼び出すにはどうすればいいですか? 質問する

ボタンクリック時にDjango関数を呼び出すにはどうすればいいですか? 質問する

Django アプリケーションを作成しようとしているのですが、ボタンがクリックされたときにビュー関数を呼び出す方法がわかりません。

私のテンプレートには、次のようなリンク ボタンがあり、クリックすると別の Web ページに移動します。

<a target="_blank" href="{{ column_3_item.link_for_item }}">Check It Out</a>

ボタンがクリックされたときに、Django ビュー関数 (およびターゲット Web サイトへのリダイレクト) も呼び出します。ビュー関数は、ボタンがクリックされた回数を格納するデータベース内の値を増加させます。

column_3_item.link_for_item外部ウェブサイトへのリンクです(例:グーグル)。現在、そのボタンをクリックすると、新しいウィンドウが開き、Google の Web サイトに移動します。

私がやりたいのは、ボタンがクリックされたときにも Django ビュー関数を呼び出して、ページを更新せずにデータベースを更新することです。どうすればこれを実現できますか?

ベストアンサー1

ここでは純粋なJavaScript、最小限のアプローチを紹介します。私はJQueryを使用していますが、任意のライブラリを使用できます(あるいは図書館が全くない)。

<html>
    <head>
        <title>An example</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script>
            function call_counter(url, pk) {
                window.open(url);
                $.get('YOUR_VIEW_HERE/'+pk+'/', function (data) {
                    alert("counter updated!");
                });
            }
        </script>
    </head>
    <body>
        <button onclick="call_counter('http://www.google.com', 12345);">
            I update object 12345
        </button>
        <button onclick="call_counter('http://www.yahoo.com', 999);">
            I update object 999
        </button>
    </body>
</html>

代替アプローチ

JavaScript コードを配置する代わりに、次のようにリンクを変更できます。

<a target="_blank" 
    class="btn btn-info pull-right" 
    href="{% url YOUR_VIEW column_3_item.pk %}/?next={{column_3_item.link_for_item|urlencode:''}}">
    Check It Out
</a>

そしてあなたのviews.py

def YOUR_VIEW_DEF(request, pk):
    YOUR_OBJECT.objects.filter(pk=pk).update(views=F('views')+1)
    return HttpResponseRedirect(request.GET.get('next'))

おすすめ記事