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ビュー関数も呼び出すことです。これを達成するにはどうすればよいですか?
これは、純粋な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')))
次の回答は、質問の最初の部分に役立つ場合があります。