Django使用AJAX查看返回值

时间:2018-04-21 21:42:31

标签: python ajax django

我正在使用Django和AJAX,

我有一个模板,人们可以选择一个选项,然后点击提交按钮。该按钮触发一个Ajax函数,该函数将数据发送到我处理它的视图,并应将值返回给模板。

问题是,当帖子通过时,它会点击视图,并且没有任何内容返回到模板,我不确定这是否是因为视图没有获取任何数据,但它不是'解雇我的任何条件陈述,所以它的作用就像它的工作,但不会返回任何东西。

我的HTML表单:

<form method="POST" id="buy_form" name="buy_form" action="{% url 'manage:buy' %}">
    {% csrf_token %}
    <div class="buy_top_section">
        <div class="width">
            <div class="spacing">
                <h3 class="sell_title">How much do you want to sell?</h3>
                <input type="text" id="amount" class="buy_input_top" maxlength="10" name="amount" type="number" required>
                <select id="selected" class="buy_selection" name="wanted">
                    <option value="generate_b">BTC</option>
                    <option value="generate_e">ETH</option>
                    <option value="generate_l">LTC</option>
                </select>
            </div>
            <span class="float_clear"></span>
            <button id='generate' type="submit" value="currency_details" class="custom_button"l">Generate
            </button>
        </div>
    </div>
</form>

<!-- What needs to be returned from thew view -->
<h1>{{ address }}</h1>

我的AJAX     $(document).on(&#39; submit&#39;,&#39;#buy_form&#39;,function(e){         e.preventDefault()

    $.ajax({
        type: 'POST',
        url:'/manage/buy/',
        data:{
            currency:$('selected').val(),
            amount:$('#amount').val(),
            csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
            },
            success: function (){

            }
        })
    });

我的Django视图

def buy_corsair(request):

    if request.method == 'POST':

    if request.POST.get('wanted') == 'generate_b':
        # Get the amount entered
        amount = request.POST.get('amount')
        # Generate a new B address
        new_b_address = client.create_address(b_account_id)['address']
        # Point the address at the user
        request.user.user_address.b_address = new_b_address
        # Save address to current user
        request.user.user_address.save()
        # Pass the address to the template
        context = {'address': new_b_address}
        return render(request, context)

urls.py

urlpatterns = [
    # Buy Page
    path('buy/', views.buy_corsair, name='buy'),
]

2 个答案:

答案 0 :(得分:0)

Ajax请求在后台运行,django渲染函数将模板渲染到body,因此无法以这种方式渲染。你可以这样;

别忘了包含

from django.http import HttpResponse

def buy_corsair(request):
    if request.method == 'POST':    
        if request.POST.get('wanted') == 'generate_b':
            # Get the amount entered
            amount = request.POST.get('amount')
            # Generate a new B address
            new_b_address = client.create_address(b_account_id)['address']
            # Point the address at the user
            request.user.user_address.b_address = new_b_address
            # Save address to current user
            request.user.user_address.save()
            # Pass the address to the template
            return HttpResponse(new_b_address)

在你的js;

$.ajax({
    type: 'POST',
    url:'/manage/buy/',
    data:{
        currency:$('selected').val(),
        amount:$('#amount').val(),
        'csrfmiddlewaretoken': "{{ csrf_token }}"
        },
        success: function (data){
            $('h1').html(data);
        }
    })
});

答案 1 :(得分:-1)

在您的 Django 视图中

import json
from django.http import HttpResponse
def buy_corsair(request):
   if request.method == 'POST':
      if request.POST.get('wanted') == 'generate_b':
         # Get the amount entered
         amount = request.POST.get('amount')
         # Generate a new B address
         new_b_address = client.create_address(b_account_id)['address']
         # Point the address at the user
         request.user.user_address.b_address = new_b_address
         # Save address to current user
         request.user.user_address.save()
         # Pass the address to the template
         context = {'address': new_b_address}
         return HttpResponse(json.dumps(context))

在你的js中

 $.ajax({
    type: 'POST',
    url:'/manage/buy/',
    data:{
        currency:$('selected').val(),
        amount:$('#amount').val(),
        csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
        },
        success: function (response){
            console.log(response);
            //access the value and print it in console//
            var obj=JSON.parse(response)["address"];

            alert(obj);
      
        }
    })
});