I use the code from the documentation to paginate the data:
try:
data = paginator.page(request.GET.get(\'page\'))
except PageNotAnInteger:
page = 1
The easy way would be to include those variables in your template:
<a href="?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.
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 %}"
Similar to YPCrumble's answer, the following snippet works for me. But the template files could get pretty crowded when there are multiple parameters.
<a href="?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.
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