# 获取用户输入的关键字 # search和分页不能同时实现的原因在于,search第二次分页因为走得是第一条路,所以数据不一样了。先不考虑直接点击按钮的问题 key_word = request.form.get('animal_key_word') if key_word is None or key_word is "": key_word = myglobal.get_value() # 将关键字拼接成模糊字段 args = '%' + key_word + '%' else: myglobal.set_value(key_word) # 将关键字拼接成模糊字段 args = '%' + myglobal.get_value() + '%' animal_search = Animal.query.filter( Animal.title.like(args) ).paginate(page=page, per_page=8)
时间: 2024-02-14 15:17:44 浏览: 134
这段代码中,首先从用户请求中获取关键字 `animal_key_word`,如果用户没有输入关键字,则从全局变量中获取关键字 `key_word`,如果全局变量中也没有关键字,则默认为 `""`。如果用户输入了关键字,则将其赋值给全局变量 `search_key_word`。无论从哪里获取到关键字,都要将其拼接成模糊查询参数 `args`。
接下来使用拼接好的参数 `args` 进行模糊查询,过滤出符合条件的 `Animal` 对象,并通过 `paginate` 方法进行分页处理,每页显示 8 条数据。
需要注意的是,代码中注释了一句“search和分页不能同时实现的原因在于,search第二次分页因为走得是第一条路,所以数据不一样了。先不考虑直接点击按钮的问题”。这应该是在提醒开发者注意,在进行搜索和分页处理时需要注意数据的一致性问题。
相关问题
def marine_organism(page, state): if request.method == 'GET' and state == 0: if page is None: page = 1 context = { 'marine_organisms': Marine_organism.query.order_by('id').paginate(page=page, per_page=8), 'state': 0 } return render_template('marine_organism.html', **context) else: # 获取用户输入的关键字 # search和分页不能同时实现的原因在于,search第二次分页因为走得是第一条路,所以数据不一样了。先不考虑直接点击按钮的问题 key_word = request.form.get('organism_key_word') if key_word is None or key_word is "": key_word = myglobal.get_value() # 将关键字拼接成模糊字段 args = '%' + key_word + '%' else: myglobal.set_value(key_word) # 将关键字拼接成模糊字段 args = '%' + myglobal.get_value() + '%' marine_organism_search = Marine_organism.query.filter( Marine_organism.data_set_name.like(args) ).paginate(page=page, per_page=8) context = { 'marine_organisms': marine_organism_search, 'state': 1 } return render_template('marine_organism.html', **context)为什么运用myglobal全局变量
在这段代码中,全局变量 `myglobal` 的作用是记录用户的搜索关键字。在用户进行搜索操作时,如果关键字为空,则从 `myglobal` 中获取上一次搜索的关键字;如果关键字不为空,则将关键字保存到 `myglobal` 中,以备下一次搜索使用。
使用全局变量是为了方便在不同的函数之间共享数据,避免了传递参数的复杂度。同时,全局变量可以在整个应用程序中被访问和修改,因此需要注意全局变量的使用方式,避免出现数据竞争等问题。
在这段代码中,全局变量的使用是为了记录用户的搜索关键字,以便在分页或者其他操作时,能够重新使用这个关键字,进行下一次搜索。这样可以提高用户体验,减少用户的操作次数。
vue3 搜索关键字筛选列表时 列表有分页 搜索到的在第二页的内容只显示在第二页 怎么让搜索到的内容重新进行分页显示在第一页
在Vue3中,当你在有分页功能的列表上进行关键字搜索时,如果搜索结果跨越了页面,你需要更新搜索状态并同步页面。这通常涉及到以下几个步骤:
1. **处理搜索事件**: 当用户输入搜索关键字时,监听搜索输入的变化。例如,你可以使用`v-model`绑定到一个计算属性,然后在这个计算属性内部处理搜索逻辑。
```js
<template>
<div>
<input v-model="searchKeyword" @input="search" />
<pagination :items-per-page="perPage" :current-page.sync="currentPage" />
<list :items="filteredItems" />
</div>
</template>
<script>
export default {
data() {
return {
searchKeyword: '',
currentPage: 1,
perPage: 10, // 分页大小
filteredItems: [], // 初始化为空的搜索结果数组
};
},
computed: {
...mapState(['totalItems']), // 如果需要获取总数据量用于判断是否翻页
},
methods: {
async search() {
const items = this.filteredList; // 获取过滤后的列表
if (items.length === 0) {
this.currentPage = 1; // 如果无搜索结果,返回第一页
} else {
const startIndex = (this.currentPage - 1) * this.perPage;
const endIndex = startIndex + this.perPage;
const slicedItems = items.slice(startIndex, endIndex); // 取当前页范围内的结果
// 更新filteredItems,并根据实际情况调整currentPage
this.filteredItems = slicedItems;
if (slicedItems.length < this.perPage && this.totalItems <= slicedItems.length) {
this.currentPage = Math.ceil(this.totalItems / this.perPage);
}
}
},
},
};
</script>
```
2. **保持分页同步**: `:current-page.sync="currentPage"` 这个绑定会实时更新视图的当前页,当`search`方法改变`currentPage`时,搜索结果就会对应地展示在新的页面上。
**相关问题--:**
1. Vue3中如何监听组件状态变化以便于做搜索操作?
2. 使用Vuex管理全局状态的情况下,如何更新分页和搜索结果?
3. 如何避免在多次连续搜索时频繁触发页面切换?
阅读全文