Невозможно вызвать функцию представления 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/',
# …
});