2013-03-11 24 views
19

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

私のテンプレートでは、クリックしたときに次のようなリンクボタンが表示され、別のウェブページに移動します。

<a target="_blank" class="btn btn-info pull-right" href="{{ column_3_item.link_for_item }}">Check It Out</a> 

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

誰でも私がどのようにこれを達成できるか教えてください。

編集: -

ご迷惑をおかけして申し訳ありません。 column_3_item.link_for_itemは外部のウェブサイトへのリンクです(例: - www.google.com)。このボタンをクリックすると、Google Webサイトに表示される新しいウィンドウが開きます。私は何をやってみたいのは、ボタンをクリックしてページを更新せずにデータベースを更新するときにもdjangoビュー関数を呼び出すことです。

ありがとう

+1

私はあなたの質問を理解していません。あなたのコードはあなたのurlconfに 'column_3_item.link_for_item'がマップされているところでview関数を呼び出します。 –

+0

ダニエルのコメントに追加:あなたがクリックする必要がある場合 - > "リアルタイム"は、ページをリフレッシュせずにクーターを更新する、あなたの質問を書き直す必要があります。あなたがそのリンクを指しているビューを持っている場合、あなたはすでに混乱のためにごめんなさい –

+0

が必要です。 'column_3_item.link_for_item'は外部ウェブサイトへのリンクです(例:www.google.com)。このボタンをクリックすると、Google Webサイトに表示される新しいウィンドウが開きます。私は何をやってみたいのは、ボタンをクリックしてページを更新せずにデータベースを更新するときにもdjangoビュー関数を呼び出すことです。 – Dev

答えて

23

ここでは、純粋なjavascript、最小限のアプローチです。私はJQueryを使用しますが、任意のライブラリ(or even no libraries at all)を使用できます。

<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'))) 
+12

downvotingの場合、なぜコメントになったのか説明してください。私の回答を改善することができます。 – furins

+0

ありがとうございました。ありがとうございました。私は代替アプローチを使用し、期待どおりに完全に機能しました。 – Dev