gpt4 book ai didi

python - django 动态分页

转载 作者:行者123 更新时间:2023-12-01 02:29:58 24 4
gpt4 key购买 nike

好吧,这是第一次在 Django 中使用分页,我试图阻止它在每次翻页时重新加载我的 View 。

我正在像这样处理 View 中的分页:

page = request.GET.get('page', 1)
print page
paginator = Paginator(list(od.iteritems())[:24], 12)

try:
data = paginator.page(page)
except PageNotAnInteger:
data = paginator.page(1)
except EmptyPage:
data = paginator.page(paginator.num_pages)

print data

save_query_form = SaveQueryForm(request.POST or None)
#if request.method == 'POST':
if save_query_form.is_valid():
profile = save_query_form.save(commit=False)
profile.user = request.user
profile.save()

context = {
"title":"Search",
'data': data,#list(od.iteritems()),
'tools': od_tools.iteritems(),
'methods': od_methods.iteritems(),
'data4': od_data.iteritems(),
'search_phrase': " ".join(instanceValuesString),
'json_dump': js_data,
'form': save_query_form,
}
return render(request, 'results.html', context)

分页在 html 中处理:

{% if data.has_other_pages %}
<div id='page-slide'>
<ul class="pagination" start='$offset'>
{% if data.has_previous %}
<li><a href="?page={{ data.previous_page_number }}">&laquo;</a></li>
{% else %}
<li class="disabled"><span>&laquo;</span></li>
{% endif %}
{% for i in data.paginator.page_range %}
{% if data.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if data.has_next %}
<li><a href="?page={{ data.next_page_number }}">&raquo;</a></li>
{% else %}
<li class="disabled"><span>&raquo;</span></li>
{% endif %}
</ul>
</div>
{% endif %}

我遇到的问题是,每当我切换到另一个页面时,我的整个 View 都会再次运行,并且数据将不会反射(reflect)原始搜索查询,而是默认为空查询。

我想知道是否有一种简单的方法可以动态处理分页或在页面之间切换时防止页面重新加载?

感谢任何帮助,谢谢。

更新搜索表单:

<form action="{% url 'results-view' %}" method="POST" class="autocomplete-me ui-widget" id="myform" >
{% csrf_token %}

<div class="ui-widget" style="text-align:center;">
<input type="text" id="id_q" name="q" placeholder="{{ search_phrase }}">
<br></br>
<div style="text-align:center;" id='adjust-button'>
<input type='submit' class='btn btn-secondary btn-lg' id ='search-btn' value='Search'/>
<a class='btn btn-secondary btn-lg' id ='clear-btn' href="{% url 'inital' %}">Clear</a>
</div>
</div>
</form>

最佳答案

您在评论中指出,您可以通过 instanceValuesString = request.POST.get(u"q").encode('utf-8').strip() 获取搜索值。正如一位评论者正确指出的那样,这意味着当您单击“下一页”链接(发出 GET 请求)时,您的 View 不会收到返回搜索结果所需的信息。

解决此问题的一种方法是从 GET 请求而不是 POST 请求获取您的 instanceValuesString。例如,您的 ListView 可能位于

http://example.com/StuffList

您可以查找提供搜索查询字符串的网址:

http://example.com/StuffList?search=goodstuff

然后在您的 View 中捕获它:

instanceValuesString = request.GET.get('search', None)
if instanceValuesString is not None:
#you have detected a search query; filter results, process request, etc.

这里的一个副作用是您当前构建下一页/上一页 URL 的方式将会被破坏。考虑示例搜索 URL;您当前的模板将为第 2 页构建一个链接,如下所示:

http://example.com/StuffList?search=goodstuff?page=2

这行不通;它应该是&page=2。幸运的是,有一个简单的解决方法:查看此问题的第二个答案:Altering one query parameter in a url (Django) 。使用 url_replace 而不是使用基本 url 模板标记构建这些链接将解决这部分问题。

关于python - django 动态分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46942056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com