首页 > 解决方案 > 发布 JSON 数据后,Django 重定向不起作用

问题描述

接收到 json 数据后,返回重定向在 else 语句中不起作用。相同的重定向适用于另一个 if 语句。在终端中,我可以看到我想要重定向到的 url 的 GET 请求,这就是为什么我觉得这很奇怪。打印语句在 else 中完美运行,只有重定向失败。到目前为止我的代码:

views.py (如果需要其他观点来回答问题,请告诉我)

def data_type_error_handling(request):
    '''handles all the possible choices after data_type_errors '''
    if '_skip' in request.POST:
        return redirect('data_validation')
    elif 'first_load' in request.session or '_refresh' in request.POST or request.method == 'GET':
        print("data_load vagy refresh")
        error_list = request.session['error_list']
        errors = json.dumps(error_list, indent=4, sort_keys=True, default=str)
        if 'first_load' in request.session:
            del request.session['first_load']
        return render(request, "upload/data-type-correction.html",
                                                 {"error_list": errors})
    else:
        raw_data = request.body.decode('utf-8')
        data = json.loads(raw_data)
        print(data)
        return redirect('data_validation')

def data_validation(request):
    return render(request, "upload/data-validation.html")

return redirect('data_validation') 在第一个 if 语句中有效,但在 else 中无效,它停留在我单击按钮的同一页面上。

网址.py

from django.urls import path
from . import views

urlpatterns=[
    path('data-upload', views.data_upload, name='data-upload'),
    path('upload-failed', views.data_upload, name='upload-failed'),
    path('upload-successful', views.data_upload, name='upload-successful'),
    path('data-type-correction', views.data_type_error_handling, name ='data-type-correction'),
    path('data-validation', views.data_validation, name ='data_validation'),
]

数据类型更正.html

{% extends "base.html" %}
{% block title %} Data type error correction {% endblock title %}
{% block content %}
    <h1>Data type errors</h1>
    
    <h3 id="data-type-error-h3">There are data type errors in your submission. Please change string characters to numbers in the Amount column.</h3>
    <input type="submit" class="btn-back-correct" id="btn-back-to-upload" value="Back" onclick="history.go(-1)" />
    <div id="main-container">
        <button type="submit" class="btn-submit-correct" id="btn-repost-data-errors" name="_reload">Load corrected data</button>
        <div id="datatype-error-container"></div>
        <form action="" method="post">
            <ul id="datatype-action-container">

                {%csrf_token%}
                
                <li><input type="submit" class="btn-submit-correct" id="btn-dismiss-data-errors" value="Skip this data" name="_skip" onclick="return confirm('Are you sure you do not need this data?');"></li>
                <li><input type="submit" class="btn-submit-correct" id="btn-refresh-data-errors" value="Refresh error list" name="_refresh"></li>

            </ul>
        </form>
        
        <!--handsontable-->
        <script>
            var errors = {{ error_list|safe }}
            console.log(errors)
            function log (event) {console.log(event)}
                var container = document.getElementById('datatype-error-container');
                var settings = {
                    data: errors,
                    rowHeaders: true,
                    colHeaders: true,
                    filters: true,
                    dropdownMenu: true,
                    contextMenu: true,
                    width: '75.66%',
                    height: 500,
                    minRows: 1,
                    afterChange: log.bind(this, 'afterChange'),
                    afterRemoveRow: log.bind(this, 'removeRow'),
                    afterRemoveCol: log.bind(this, 'removeCol'),
                    afterCreateRow: log.bind(this, 'createRow'),
                    afterCreateCol: log.bind(this, 'createCol'),
                     columns: [
                            {
                        data: 0,
                        type: 'text',
                        width: 210,
                        allowInsertRow: true
                },
                              {
                        data: 1,
                        width: 210,
                        type: 'text',
                },
                            {
                        data: 2,
                        width: 210,
                        type: 'text',
                },
                            {
                        data: 3,
                        width: 210,
                },

                ],
                licenseKey: 'non-commercial-and-evaluation',
                colHeaders: [
                'CID',
                'Product',
                'Account',
                'Amount'
                ]

            };
            var hot = new Handsontable(container, settings);

        </script>
        <script src="../../static/app/scripts/fetchData.js"></script>
    </div>
{% endblock content %}

数据验证.html

{% extends "base.html" %}
{% block title %} Data validation {% endblock title %}
{% block content %}
<h1>Data validation output goes here</h1>
{% endblock content %}

标签: pythondjangoredirect

解决方案


推荐阅读