1

AJAXを組み込んだDjangoで動作する基本的なアプリを取得しようとしています。アプリはドメイン名を受け取り、それをサーバーに送信します。サーバーはそれに対して dns ルックアップを実行し、AJAX 経由でクライアントに応答を返します。

ビュー

from django.http import *
from django.shortcuts import render_to_response
from django.template import RequestContext

import sys
import os
import socket

def main(request):
    if request.method == 'POST':
       dig_input = request.POST['digInput']
       digoutput = socket.gethostbyname(dig_input)
       return render_to_response('digajax.html', {'response': digoutput}, context_instance=RequestContext(request))
    else:
       return render_to_response('digajax.html', context_instance=RequestContext(request))

URL

url(r'^digajax$', 'digajax.views.main'),

テンプレート

<!DOCTYPE html>
<html lang="en">
 <head>
    <meta charset="utf-8">
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.js'></script>

<script type="text/javascript">
function send_request(){
  $.get(location.href, function(data){
    $("#output").html(data.output);
  });
}

 </head>
  <body>
        <form method="post" name="diginput form" action="/digajax">
          {% csrf_token %}
                                <input name="digInput" id="digInput" type="text">
                                <input type="button" onclick="send_request();" value="Request this page with AJAX">lookup</input>
                </form>
{% if response %}
  <div id="output">
    <p>{{ response|linebreaksbr }}</p>
  </div>
{% else %}
  <p>no</p>
{% endif %}

  </body}
</html>

AJAX がなければ、すべてが機能します。AJAX を使用したいので、各セクションにどのコードを追加する必要があるかではありません。

どんな助けでも本当に感謝します.......

4

1 に答える 1

1
  1. Django は、ビューが渡されたオブジェクトにメソッドを提供します。これにより、リクエストが , 経由でrequest行われたかどうかがわかります。XmlHttprequest.is_ajax()
  2. そのメソッドが true を返す場合、おそらくページ全体ではなく、更新したいページのフラグメントのみを返す必要があります。
  3. そのメソッドが false を返す場合、ユーザーが JavaScript をオフにしているか、ビューが正常に要求される原因となった何らかのエラーが発生したため、おそらくページ全体を返したいと考えています。

したがって、ビューは次のようになります。

def main(request):
    if request.method == 'POST':
       dig_input = request.POST['digInput']
       digoutput = socket.gethostbyname(dig_input)
       if request.is_ajax():
            return HttpResponse("<p>%s</p>" % digoutput)
       else:
            return render(request, 'digajax.html', {
                'response': digoutput
            })
    else:
       return render(request, 'digajax.html')

JavaScript コードは次のようになります。

<script type="text/javascript">
function send_request(){
  $.get(location.href, function(data){
    $("#output").html(data);
  });
}
</script>
于 2013-03-10T23:20:04.803 に答える