1 回答

TA貢獻1835條經驗 獲得超7個贊
解決。從 https://simpleisbetterthancomplex.com/snippet/2016/08/22/dealing-with-querystring-parameters.html 實現的概念。為了保留當前的 url 參數,我們必須定義一個自定義模板標記。在 app1 下創建一個名為模板標記的新目錄。在該目錄中創建 一個。創建另一個.py文件,比如app1_extras。在app1_extras中,定義自定義模板標記,如下所示。app1/模板標簽/app1_extras.py,__init__.py
from django import template
register = template.Library()
@register.simple_tag
def relative_url(value, field_name, urlencode=None):
url = '?{}={}'.format(field_name, value)
if urlencode:
querystring = urlencode.split('&')
filtered_querystring = filter(lambda p: p.split('=')[0] != field_name, querystring)
encoded_querystring = '&'.join(filtered_querystring)
url = '{}&{}'.format(url, encoded_querystring)
return url
這將獲取我們當前的 URL,并確保參數與頁碼一起就位。field_name是字符串“page”,值是從模板傳遞的頁碼。網址代碼將我們當前的網址表示為字符串。在 app1/show_all_persons.html,
{% load app1_extras %}
<form method="get">
{{ filtered_person_list.form.as_p }}
<button type="submit">Search</button>
</form>
{% for person in person_page_obj %}
<img src="{{ person.picture.url }}" width="240">
<h2>
{{person.name}}
<br>
{{person.gender}}
<br>
{{person.category}}
<br>
</h2>
<br>
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if person_page_obj.has_previous %}
<a href="{% relative_url 1 'page' request.GET.urlencode %}">« first</a>
<a href="{% relative_url person_page_obj.previous_page_number 'page' request.GET.urlencode %}">previous</a>
{% endif %}
<span class="current">
Page {{ person_page_obj.number }} of {{ person_page_obj.paginator.num_pages }}.
</span>
{% if person_page_obj.has_next %}
<a href="{% relative_url person_page_obj.next_page_number 'page' request.GET.urlencode %}">next</a>
<a href="{% relative_url person_page_obj.paginator.num_pages 'page' request.GET.urlencode %}">last »</a>
{% endif %}
</span>
</div>
{% 加載 app1_extras %} 將加載我們新的自定義模板標記。relative_url函數現在被傳遞給我們頁面鏈接的hrefs。參數按請求的順序傳遞。GET.網址代碼將包含我們當前的網址,并將傳遞給網址代碼參數。
添加回答
舉報