如何在 Django 获取请求中修改 url
How to modify url in a django get request
我有一个显示一些数据的网页(在视图中使用获取参数进行过滤)并且我使用了分页。
为了浏览数据,我使用 link 来更改分页器中的页面:
<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
视图运行良好(它显示了最后一页)但我看到了这个丑陋的东西 link。
我试过类似的东西:
request.GET.get = querydict
(with querydict 一个只有一页数据的QueryDict对象)
但它没有用。我也想到了在模板中解析数据,但也许有更好的方法。
你想在 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>
我有一个显示一些数据的网页(在视图中使用获取参数进行过滤)并且我使用了分页。
为了浏览数据,我使用 link 来更改分页器中的页面:
<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
视图运行良好(它显示了最后一页)但我看到了这个丑陋的东西 link。
我试过类似的东西:
request.GET.get = querydict
(with querydict 一个只有一页数据的QueryDict对象) 但它没有用。我也想到了在模板中解析数据,但也许有更好的方法。
你想在 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>