Pagination In Django - The Original Query String Gets Lost
Solution 1:
You can access parameters from your request directly in your template if you activate django.core.context_processors.request
in your settings. See https://docs.djangoproject.com/en/1.7/ref/templates/api/#django-core-context-processors-request
Then you can access parameters in your template directly. In your case you'll need to filter page
parameter. You could do something like this:
href="?page={{ data.next_page_number }}{% for key, value in request.GET.items %}{% if key != 'page' %}&{{ key }}={{ value }}{% endif %}{% endfor %}"
Solution 2:
Another possible solution can be to construct parameters list in your view. Pros: you can use clean and expressive methods on QueryDict
.
It will be look like this:
get_copy = request.GET.copy()
parameters = get_copy.pop('page', True) and get_copy.urlencode()
context['parameters'] = parameters
That's it! Now you can use your context
variable in template:
href="?page={{ paginator.next_page_number }}&{{ parameters }}"
See, code looks clean and nicely.
note: assumes, that your context contained in context
dict and your paginator in paginator
variable
Solution 3:
The easy way would be to include those variables in your template:
<ahref="?var1={{var1}}&var2={{var2}}&page={{ data.next_page_number }}">next</a>
Just add var1
and var2
to your context
.
That's if the query string variables are originated from your backend. If they're coming from the front-end/external, you could use something like How can I get query string values in JavaScript? in your template and either edit the template vars directly or pass the values to your backend.
Solution 4:
Similar to YPCrumble's answer, the following snippet works for me. But the template files could get pretty crowded when there are multiple parameters.
<ahref="?p={{ page }}{% if search %}&search={{ search }}{% endif %}">{{ page }}</a>
Note that you must know the parameter names when apply this solution, so it may not fully satisfy your need.
Post a Comment for "Pagination In Django - The Original Query String Gets Lost"