我有一個顯示一些資料的網頁(帶有在視圖中過濾的獲取引數),并且我使用了分頁。
要瀏覽資料,我使用鏈接來更改分頁器中的頁面:
<li class="paginator-data"><a href="{{ request.get_full_path }}?page={{ page_obj.next_page_number }}">Next</a></li>
這是視圖:
@login_required
def search_and_export(request):
# initialisation
page_obj = Tree.objects.all()
# FORM
if request.method == 'GET':
## Here I get GET parameters or a default value like
data = str(request.GET.get('data', 1))
page = str(request.GET.get('page', 1))
## creating a queryDict
querydict = QueryDict('data=' data '&page=' page)
big_request_form = BigRequestForm(querydict)
if big_request_form.is_valid():
# Getting data from front endda
data = big_request_form.cleaned_data['data']
# Extracting QuerySet
page_obj = filtering_function(data)
paginator = Paginator(page_obj,25)
page_obj = paginator.get_page(page)
page_obj.adjusted_elided_pages = paginator.get_elided_page_range(number = page, on_each_side=1, on_ends=1)
else:
big_request_form = BigRequestForm()
# return values
context = {
'big_request_form' : big_request_form,
'page_obj' : page_obj,
}
return render(request, 'filtered_stats.html', context)
這是問題所在:瀏覽幾頁后,url 看起來像這樣:
http://127.0.0.1:8000/?data=x&page=2&page=3&page=4&page=5&page=6
該視圖運行良好(它向我顯示了最后一頁),但我得到了這個丑陋的鏈接。
我嘗試過這樣的事情:
request.GET.get = querydict
(使用 querydict 一個只有一頁資料的 QueryDict 物件)但它不起作用。我也想過在模板中決議資料,但也許有更好的方法。
uj5u.com熱心網友回復:
您想要在 HTML 模板中做的是獲取當前 URL。但實際上您不必這樣做 - 可以使用相對路徑。所以只需洗掉它:
<li class="paginator-data"><a href="?page={{ page_obj.next_page_number }}">Next</a></li>
瀏覽器知道當前 URL 并將使用href
相對于它的屬性。
UPD
替代方案 - 將其他引數保留在 URL 中是在視圖中構造“下一個 URL”并將其在背景關系中傳遞為next_url
.
即是這樣的:
在意見中:
next_url = request.get_full_path()
next_url.replace(f'page={current}', f'page={page_obj.next_page_number}')
context['next_url'] = next_url
在模板中:
<li class="paginator-data"><a href="{{ next_url }}">Next</a></li>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/469355.html
上一篇:Python:從URL請求大負載