ajax - 如何在加载更多 django 时获取下一页
问题描述
我使用 ajax 获取数据,按钮加载更多,如果没有下一页,它将呈现“所有数据已显示”
索引.html
<div class="panel-body">
<div id="display-data">
<span id="loading-help">Loading data. . .</span>
</div>
</div>
<script>
var page = 1
$(document).ready(function(){
$.get("{% url 'account:profile' %}?param=get_data&page="+page,
function(data){
$("#display-data").append(data)
$("#loading-help").remove()
page++
})
</script>
数据-ajax.html
{% for data in datas %}
<div class="list-trx-data">
<div class="row align-items-center">
<div class="col-md-8">
<div class="row align-items-center">
<div class="col-md-4 col-sm-12 col-12 data-date">
{{data.get_formatted_date}}</div>
<div class="col-md-8 col-sm-12 col-12 data-name">
<a href="#">{{data.get_data}}</a></div>
</div>
</div>
<div class="col-md-4">
<div class="row align-items-center">
<div class="col-md-6 col-8 data-amount">
{{data.get_formatted_amount}}</div>
<div class="col-md-6 col-4 ">
<div class="data-progress">
<div class="pg-bar" style="width:
{{data.get_data.get_progress_str}}"></div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
{% if datas.has_other_pages %}
{% if datas.has_next %}
<a href="javascript:void(0)" class="btn btn-ghost btn-block mt-2"
id="load-more-btn">Load More</a>
{% else %}
<a href="javascript:void(0)" class="btn btn-ghost btn-block mt-2"
id="load-more-btn">All data has been displayed</a>
{% endif %}
{% endif %}
<script>
$("#load-more-btn").click(function(){
$.get("{% url 'account:profile' %}?param=get_data&page="+page,
function(data){
$("#display-data").append(data)
page++
})
})
</script>
我已经尝试过了,但是 在单击加载更多之前它会渲染所有按钮
如何解决?
解决方案
首先,不要将 javascript 放在data-ajax.html
. 所有的javascript代码都应该放在index.html
需要实现所有逻辑的地方。如果没有其他数据,data-ajax.html
返回的应该是空的。
数据-ajax.html
{% for data in datas %}
<div class="list-trx-data">
<div class="row align-items-center">
<div class="col-md-8">
<div class="row align-items-center">
<div class="col-md-4 col-sm-12 col-12 data-date">
{{data.get_formatted_date}}</div>
<div class="col-md-8 col-sm-12 col-12 data-name">
<a href="#">{{data.get_data}}</a></div>
</div>
</div>
<div class="col-md-4">
<div class="row align-items-center">
<div class="col-md-6 col-8 data-amount">
{{data.get_formatted_amount}}</div>
<div class="col-md-6 col-4 ">
<div class="data-progress">
<div class="pg-bar" style="width:
{{data.get_data.get_progress_str}}"></div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
{% if datas.has_other_pages %}
{% if datas.has_next %}
<a href="javascript:void(0)" class="btn btn-ghost btn-block mt-2"
id="load-more-btn">Load More</a>
{% endif %}
在您的index.html
中,检查 ajax 调用是否返回任何内容,如果没有,则更改按钮文本,否则,删除按钮元素,因为您data-ajax.html
已经有基于{% if datas.has_other_pages %}
.
索引.html
<div class="panel-body">
<div id="display-data">
<span id="loading-help">Loading data. . .</span>
</div>
</div>
<script>
$(document).ready(function(){
var page = 1; //page defined in $(document).ready()
function getData(){
$.get("{% url 'account:profile' %}?param=get_data&page="+page, function(data){
$("#loading-help").remove();
if (data){
// data was received
$("#loading-help").remove();
$("#load-more-btn").remove(); # remove the load button if data is there.
$("#display-data").append(data);
page++;
} else {
$("#load-more-btn").text("All data has been displayed"); # else, change button text.
}
});
}
getData(); //Load data for the first time.
$("#load-more-btn").click(function(){
getData(); //Load data on button click.
});
</script>
推荐阅读
- android - Jetpack Compose 如何删除 EditText/TextField 下划线并保持光标?
- vim - 如何在 vim 可视模式下获取当前光标位置
- r - 为什么 apply() 有时会产生一个列表,而有时会产生一个向量?
- python - 如何处理反序列化的数据结构
- entity-framework-core - DbContext.Database.ExecuteSqlRaw() 的正确语法
- python-3.x - gunicorn 在没有交通的情况下反复杀死工人
- html - 带输入单选的 CSS 选项卡系统(无 js)
- mysql - 子查询使用 Wordpress postmeta 查询返回超过 1 行
- java - 如何在不冻结 UI 的情况下休眠代码?
- ios - IOS 14.3 Safari 上的 GetUserMedia (WebRTC) 错误:NotAllowedError