Невозможно вызвать функцию представления Django через функцию ajax

viwes.py

def post_upload(request, resolution, format, size):
    print(resolution)
    print(format)
    print(size)
    return render(request, 'upload .html')

urls.py

path(r'^post_upload/$', views.post_upload, name='post_upload')

give.js:

$(".btn").bind('click', function(){

    console.log('download button clicked');

    var resolution = $(this).closest("tr").find(".resolution").text();
    var format = $(this).closest("tr").find(".format").text();
    var size = $(this).closest("tr").find(".size").text();
    var csrf_token = $("input[name='csrfmiddlewaretoken']").val();


    console.log(resolution,format,size, csrf_token);
    $.ajaxSetup({
        headers: {
        'X-CSRFToken': csrf_token
        }
    });
    $.ajax({
    type: 'POST',
     url : "{% url 'post_upload' %}",
     data: {
        resolution: resolution,
        format: format,
        size: size,
     },
     dataType:"html",
     success: function(data, status, xhr){
        //do something with your data
    }
    });

    return false;
});

html файл:

<form>
{% csrf_token %}
    <button type="button"  name="url" value="{{ request.GET.url }}"  type="submit" id="download" class="btn btn-success" >Download</button>
</form>

 <script src="https://code.jquery.com/jquery-3.6.0.js"></script>

    <script src="{% static 'js/popper.min.js' %}"></script>
    <script src="{% static 'js/bootstrap.bundle.min.js'%} "></script>

    <script src="{% static 'js/plugin.js' %}"></script>
    <!-- sidebar -->
    <script src="{% static 'js/jquery.mCustomScrollbar.concat.min.js' %}"></script>
    <script src="{% static 'js/custom.js' %}"></script>
    <script src="https:cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js"></script>
    <script src="{% static 'js/give.js' %}"></script>

Путь не имеет смысла, поскольку path(…) [Django-doc] работает с синтаксисом пути, не регулярного выражения. Кроме того, вы не можете использовать {% url … %} [Django-doc] в .js файле, так как JavaScript файл просто возвращается, он не рендерится.

Таким образом, это означает, что вы переписываете путь на:

urlpatterns = [
    # …,
    path('post_upload/', views.post_upload, name='post_upload')
    # …
]

а в файле give.js мы работаем с:

$.ajax({
    type: 'POST',
    url : '/post_upload/',
    # …
});
Вернуться на верх