45

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

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

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

ボタンがクリックされたら、Djangoビュー関数も呼び出します(ターゲットWebサイトにリダイレクトします)。ビュー機能は、ボタンがクリックされた回数を格納するデータベースの値をインクリメントします。

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

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

4

3 に答える 3

49

これは、純粋な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'))
于 2013-03-11T16:42:15.103 に答える
18

私が個人的に使用する2つの可能な解決策があります

1.フォームを使用せずに

 <button type="submit" value={{excel_path}} onclick="location.href='{% url 'downloadexcel' %}'" name='mybtn2'>Download Excel file</button>

2.フォームの使用

<form action="{% url 'downloadexcel' %}" method="post">
{% csrf_token %}


 <button type="submit" name='mybtn2' value={{excel_path}}>Download results in Excel</button>
 </form>

urls.pyがこれを持っているべき場所

path('excel/',views1.downloadexcel,name="downloadexcel"),
于 2019-09-26T18:01:28.083 に答える
4

次の回答は、質問の最初の部分に役立つ可能性があります。

Django:テンプレートからビュー関数を呼び出すにはどうすればよいですか?

于 2013-11-04T04:08:38.423 に答える