Ajax возврат `none` в django - PullRequest
0 голосов
/ 18 июня 2020

У меня эта форма в таблице с двумя button. Код: index. html

<form action="{% url 'Prediction' %}" method="post">
    {% csrf_token %}
    <table class="table table-striped table-dark" cellspacing="0">
        <thead class="bg-info">
            <tr>
               <th>Company's Symbol</th>
               <th>Current Price</th>
               <th>View Current chart</th>
               <th>Action</th>
            </tr>
        </thead>
        <tbody>
           {% for a,b in stocks %}
               <tr>
                  <th scope="row" class="comp_name">{{ a }}</th>
                  <td>{{ b }}</td>
                  <td>
                     <input type="submit" class="btn graph-btn" formaction="{% url 'Graph' %}" name="_graph" value="View Graph">
                  </td>
                  <td>
                     <input type="submit" class="btn predict-btn" name="_predict" value="Predict Closing Price">
                  </td>
              </tr>
           {% endfor %}
        </tbody>
    </table>
</form>

Нажав .graph-btn, мне нужно передать данные строки, на которой была нажата кнопка. Вот код, который работает.

<script>
    $(".graph-btn").click(function() {
    var $row = $(this).closest("tr");
    var $text = $row.find(".comp_name").text();
    console.log($text);
    $.ajax({
        type:'POST',
        url:'{% url 'Graph' %}',
        data:{
            text: $text,
            csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
        },
        success:function(json){
        console.log($text);
        },
        error : function(xhr,errmsg,err) {
        }
    });
});
</script>

Но проблема в том, что In views.py возвращает none:

views.py

def graph(request):
    if request.method == 'POST' and '_graph' in request.POST:
        print(request.POST.get('text'))
        # context = {'name': name}
        # # print(name)
        return render(request, 'StockPrediction/chart.html')
    else:
        return render(request, 'StockPrediction/greet.html')

urls.py

urlpatterns = [
    path("", views.greet, name='greet'),
    path("index/", views.index, name='Stock Prediction'),
    path("prediction/", views.prediction, name='Prediction'),
    path("view/", views.graph, name='Graph'),
]

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

В графике функции представления (запрос) вы не возвращаете значение, а вместо этого отображает страницу HTML с запросом.

Функция представления в Django должна либо возвращать JSON, либо словарь или может вернуть веб-страницу. Вы можете выполнить одно из следующих действий:

1) вернуть словарь или JSON

return {"key":"value","key":"value"}

2) вернуть HttpResponse

return HttpResponse(status_code, response_data)

3) Перенаправить на другую страницу

return redirect('/some/redirect/url/')

Попробуйте описанное выше и прокомментируйте, если это поможет

0 голосов
/ 18 июня 2020

попробуйте добавить в запрос dataType: 'json'. Например:

$.ajax({
    type: 'post',
    url: '{% url 'Graph' %}',
    headers: {
        'X-CSRFToken': $('input[name=csrfmiddlewaretoken]').val()
    }
    data: {
        text: $text,
    },
    dataType: 'json',
    success: function (data) {
       console.log(data)
    },
    error: function(error) {
       console.log(error)
    }
});
...