Jquery 在Django中使用和发布可排序的结果
我正在制作一个模型列表,我希望能够拖动这些模型,然后根据附加的排序值将订单保存为数据库中的新订单。 现在,我有以下html代码:Jquery 在Django中使用和发布可排序的结果,jquery,django,jquery-ui,django-views,Jquery,Django,Jquery Ui,Django Views,我正在制作一个模型列表,我希望能够拖动这些模型,然后根据附加的排序值将订单保存为数据库中的新订单。 现在,我有以下html代码: <script src="https://code.jquery.com/jquery-3.2.1.js"></script> <script src="https://code.jquery.com/ui/3.2.1/jquery-ui.js"></script> <script src="{% st
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script src="https://code.jquery.com/ui/3.2.1/jquery-ui.js"></script>
<script src="{% static 'draggable.js' %}"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#test").submit(function(event){
$.ajax({
type:"POST",
url:"{% url 'editpage' bid=book.id pid=page.page_num %}",
data: {
'order': 1 // insert ordering here
},
success: function(){
}
});
return false;
});
});
</script>
</head>
<body>
<h1>{{page.page_title}}</h1>
<ul id="sortable">
{% for section in sections.all %}
<li style="background:blue">{{section.section_title}}</li>
{% endfor %}
</ul>
<form method='post' id ='test'>
<input type='submit' value='Test button'/>
</form>
这其中很好的一部分是测试代码,但我正试图在完全实现之前让它在小范围内工作。我面临的两个主要问题是,在哪里插入可排序代码,以及如何保存这些信息以在按下按钮时发布 下面是一个可以使用的JavaScript示例 工作示例: HTML
<h1>Page Title</h1>
<ul id="sortable">
<li style="background:blue" id="model-1">Section Title 1</li>
<li style="background:blue" id="model-2">Section Title 2</li>
<li style="background:blue" id="model-3">Section Title 3</li>
<li style="background:blue" id="model-4">Section Title 4</li>
<li style="background:blue" id="model-5">Section Title 5</li>
</ul>
<a id="test" href="#">Test Button</a>
JavaScript
$(function() {
$("#test").button().click(function(e) {
e.preventDefault();
var serialOrder = $("#sortable").sortable("serialize");
var arrayOrder = $("#sortable").sortable("toArray");
$.ajax({
type: "POST",
// used for this example
url: "/echo/json/",
dataType: "json",
data: {
json: JSON.stringify(arrayOrder)
},
success: function(data) {
// Do something with the data
console.log(data);
}
});
});
$("#sortable").sortable();
});
您的代码将不同。这只是一个基于页面中可能填充的内容的接近示例
您的表单中没有任何内容可以从可排序列表中收集订单或数据。这可以使用序列化
或toArray
方法来完成。请参阅更多:
希望对您有所帮助。这里是一个可以使用的JavaScript示例 工作示例: HTML
<h1>Page Title</h1>
<ul id="sortable">
<li style="background:blue" id="model-1">Section Title 1</li>
<li style="background:blue" id="model-2">Section Title 2</li>
<li style="background:blue" id="model-3">Section Title 3</li>
<li style="background:blue" id="model-4">Section Title 4</li>
<li style="background:blue" id="model-5">Section Title 5</li>
</ul>
<a id="test" href="#">Test Button</a>
JavaScript
$(function() {
$("#test").button().click(function(e) {
e.preventDefault();
var serialOrder = $("#sortable").sortable("serialize");
var arrayOrder = $("#sortable").sortable("toArray");
$.ajax({
type: "POST",
// used for this example
url: "/echo/json/",
dataType: "json",
data: {
json: JSON.stringify(arrayOrder)
},
success: function(data) {
// Do something with the data
console.log(data);
}
});
});
$("#sortable").sortable();
});
您的代码将不同。这只是一个基于页面中可能填充的内容的接近示例
您的表单中没有任何内容可以从可排序列表中收集订单或数据。这可以使用序列化
或toArray
方法来完成。请参阅更多:
希望这能有所帮助。你不是把它放在onload函数中,以便它在页面加载时工作吗?您希望向视图发送什么?在你看来,你想用它做什么?有很多方法可以做到这一点。如果要确保它在所有其他元素之后加载,可以在页面末尾添加一个
部分。您还可以使用onload
,$(document).ready(function(){})
,或者现在更常用的$(function(){})另外,jQuery的版本是3.2.1,而jQueryUI的版本只有1.12.1。因此,对ui 3.2.1的调用将失败。请回顾:你不只是把它放在onload函数中,以便在页面加载时工作吗?您希望向视图发送什么?在你看来,你想用它做什么?有很多方法可以做到这一点。如果要确保它在所有其他元素之后加载,可以在页面末尾添加一个
部分。您还可以使用onload
,$(document).ready(function(){})
,或者现在更常用的$(function(){})另外,jQuery的版本是3.2.1,而jQueryUI的版本只有1.12.1。因此,对ui 3.2.1的调用将失败。请检查:当使用javascript时,我会收到crsf错误,并且列表仍然无法拖动。我刚刚用你的js替换了我的js,然后将其更改为与我的VAR匹配。我是否需要导入或包含文件以使其正常工作?您是否看到我对您的jQuery UI 3.2.1调用的评论?该文件不存在。确保您使用了正确的URL:我知道了,我已经修复了。没有更多的错误,所有都正常工作,但post操作不会在我的终端中发生。按钮起作用但不执行。不要使用我的AJAX代码。你会想让它回到你的需要。根据您的浏览器,您将在控制台的“网络”部分下看到AJAX详细信息。例如,数据
应该类似于:数据:serialOrder
,以便您以适当的方法发布数据数组。我的例子中的AJAX是特定于jsfiddles AJAX Echo特性的,当使用javascript时,我会出现crsf错误,列表仍然无法拖动。我刚刚用你的js替换了我的js,然后将其更改为与我的VAR匹配。我是否需要导入或包含文件以使其正常工作?您是否看到我对您的jQuery UI 3.2.1调用的评论?该文件不存在。确保您使用了正确的URL:我知道了,我已经修复了。没有更多的错误,所有都正常工作,但post操作不会在我的终端中发生。按钮起作用但不执行。不要使用我的AJAX代码。你会想让它回到你的需要。根据您的浏览器,您将在控制台的“网络”部分下看到AJAX详细信息。例如,数据
应该类似于:数据:serialOrder
,以便您以适当的方法发布数据数组。我的示例中的AJAX是特定于jsfiddles AJAX Echo特性的。