2017-06-01 11 views
0

私はいくつかのデータを取得する関数を持っています。結果は、たとえば次のとおりです。Python/Djangoデータからjquery警告ボックス

def my_function(self, request): 
    sites = Site.objects.filter(is_active=False) 
    return HttpResponseRedirect(request.META["HTTP_REFERER"], {'result': sites}) 

def get_urls(self): 
    urls = super(ConfigAdmin, self).get_urls() 
    my_urls = [ 
     url(r'^my_function/$', self.export), 
    ] 
    return my_urls + urls 

これは私のボタンのコードです:

<input type="submit" onclick="location.href='my_function/'" value="{% trans 'My_function' %}" /> 

私は結果を入れたい

sites = Site.objects.filter(is_active=False) 

機能は、ボタンがDjangoのadmin.pyに押された後に実行しますjquery警告ボックスに。それをどうすれば実現できますか?

+0

結果を取得しますか? 'my_function'は結果を返しません。実際、その機能**はまったく何もしません**。 –

+0

return HttpResponseRedirect(request.META ["HTTP_REFERER"]、{'result':sites}) - 今は大丈夫ですか?サイトは単なる実例です。機能は多くのサイトをチェックし、変更(オブジェクトの編集)を行います。私は「5つの変更されたサイトがあります(ここにリンクしています)」というようなものを表示したいと思います。 – jundymek

+1

JQueryを使用してajax呼び出しを行い、結果を警告ボックスに表示する必要があります。 – Selcuk

答えて

1

まず、jqueryコールバックが処理できるように、ビューで有効なjsonオブジェクトを返す必要があります。 Djangoには、データのシリアル化に使用できるJsonResponseが組み込まれています。

from django.http import JsonResponse 

def my_function(self, request): 
    sites = Site.objects.filter(is_active=False).values_list('name', flat=True) 
    return JsonResponse({'result': sites}, safe=False) 

ここでは、これをjqueryのページに表示する必要があります。クリックコールバックをリンクにバインドし、ビューの結果を警告することで、これを行うことができます。

<a href="#" id="my-button">{% trans 'My_function' %}</a> 

<script> 
$('#my-button').click(function(){ 
    $.get('my_function/', function(data){ 
     alert(data.result); 
    }); 
}); 
</script> 
+0

私はあなたの解決策をチェックしようとします。 jsonに問題があります。私はエラーが発生します:「JSONはシリアライズできません」私はjsonについて読む必要があります。私の悪い英語の言い訳... – jundymek

+0

ああ、はい。 'sites'をもう一度処理しなければならないでしょう。おそらくサイト名のリストが必要なのでしょうか?リストと辞書はすべてシリアライズ可能です。 'sites'はこの時点でクエリーセットです。 – Brobin

+0

'sites 'がJsonシリアライズ可能になるように答えを更新しました。 – Brobin

0

私はそうしました。

私のadmin.py:それは適切な方法でそれは動作しますが、私は知らない

def my_function(self, request): 
    sites = Site.objects.filter(is_active=False) 
    if request.is_ajax(): 
     message = sites 
     return HttpResponse(message) 
    else: 
     return HttpResponseRedirect(request.META["HTTP_REFERER"]) 

私の.jsファイル:

$('#content > p > input[type="submit"]:nth-child(2)').click(function() { 
     $.get("my_function/", function (data) { 
     alert(data); 
    }); 
    }); 

私のテンプレートファイル:

<input type="submit" onclick="location.href='my_function/'" value="{% trans 'My_function' %}" /> 

いいですか?それは私の機能からの変数で警告ボックスを表示します。

関連する問題