
import urllib
from django import template

register = template.Library()

@register.inclusion_tag('bootstrap_paginator/paginator.html', takes_context=True)
def paginator(context, page=None):
    """
    Based on: http://djangosnippets.org/snippets/2680/

    To be used in conjunction with the object_list generic view.

    Adds pagination context variables for use in displaying first, adjacent and
    last page links in addition to those created by the object_list generic
    view.
    """
    adjacent_pages = 2

    page = context.get('page_obj', page)
    paginator = page.paginator

    startPage = page.number - adjacent_pages
    if startPage <= adjacent_pages + 1:
        startPage = 1
    endPage = page.number + adjacent_pages + 1

    page_numbers = [
        n for n in range(startPage, endPage)
        if n >= 1 and n <= paginator.num_pages
    ]

    return {
        'page': page,
        'paginator': paginator,
        'page_numbers': page_numbers,
        'show_first': 1 not in page_numbers,
        'show_last': paginator.num_pages not in page_numbers,
        'request': context['request'],
    }


@register.simple_tag(takes_context=True)
def append_to_get(context, **kwargs):
    get = context['request'].GET.copy()
    get.update(kwargs)
    return '?{1}'.format(urllib.urlencode(get))


from django.utils.six.moves.urllib.parse import urlencode
from django import template

register = template.Library()

@register.inclusion_tag('bootstrap_paginator/paginator.html', takes_context=True)
def paginator(context, page=None):
    """
    Based on: http://djangosnippets.org/snippets/2680/

    To be used in conjunction with the object_list generic view.

    Adds pagination context variables for use in displaying first, adjacent and
    last page links in addition to those created by the object_list generic
    view.
    """
    adjacent_pages = 2

    page = context.get('page_obj', page)
    paginator = page.paginator

    startPage = page.number - adjacent_pages
    if startPage <= adjacent_pages + 1:
        startPage = 1
    endPage = page.number + adjacent_pages + 1

    page_numbers = [
        n for n in range(startPage, endPage)
        if n >= 1 and n <= paginator.num_pages
    ]

    return {
        'page': page,
        'paginator': paginator,
        'page_numbers': page_numbers,
        'show_first': 1 not in page_numbers,
        'show_last': paginator.num_pages not in page_numbers,
        'request': context['request'],
    }


@register.simple_tag(takes_context=True)
def append_to_get(context, **kwargs):
    get = context['request'].GET.copy()
    get.update(kwargs)
    return '?{1}'.format(urlencode(get))

Use a py3 compatible urlencode
Use a py3 compatible urlencode
  
- import urllib
+ from django.utils.six.moves.urllib.parse import urlencode
  from django import template
  
  register = template.Library()
  
  @register.inclusion_tag('bootstrap_paginator/paginator.html', takes_context=True)
  def paginator(context, page=None):
      """
      Based on: http://djangosnippets.org/snippets/2680/
  
      To be used in conjunction with the object_list generic view.
  
      Adds pagination context variables for use in displaying first, adjacent and
      last page links in addition to those created by the object_list generic
      view.
      """
      adjacent_pages = 2
  
      page = context.get('page_obj', page)
      paginator = page.paginator
  
      startPage = page.number - adjacent_pages
      if startPage <= adjacent_pages + 1:
          startPage = 1
      endPage = page.number + adjacent_pages + 1
  
      page_numbers = [
          n for n in range(startPage, endPage)
          if n >= 1 and n <= paginator.num_pages
      ]
  
      return {
          'page': page,
          'paginator': paginator,
          'page_numbers': page_numbers,
          'show_first': 1 not in page_numbers,
          'show_last': paginator.num_pages not in page_numbers,
          'request': context['request'],
      }
  
  
  @register.simple_tag(takes_context=True)
  def append_to_get(context, **kwargs):
      get = context['request'].GET.copy()
      get.update(kwargs)
-     return '?{1}'.format(urllib.urlencode(get))
+     return '?{1}'.format(urlencode(get))
  
Use a py3 compatible urlencode
## Code Before:

import urllib
from django import template

register = template.Library()

@register.inclusion_tag('bootstrap_paginator/paginator.html', takes_context=True)
def paginator(context, page=None):
    """
    Based on: http://djangosnippets.org/snippets/2680/

    To be used in conjunction with the object_list generic view.

    Adds pagination context variables for use in displaying first, adjacent and
    last page links in addition to those created by the object_list generic
    view.
    """
    adjacent_pages = 2

    page = context.get('page_obj', page)
    paginator = page.paginator

    startPage = page.number - adjacent_pages
    if startPage <= adjacent_pages + 1:
        startPage = 1
    endPage = page.number + adjacent_pages + 1

    page_numbers = [
        n for n in range(startPage, endPage)
        if n >= 1 and n <= paginator.num_pages
    ]

    return {
        'page': page,
        'paginator': paginator,
        'page_numbers': page_numbers,
        'show_first': 1 not in page_numbers,
        'show_last': paginator.num_pages not in page_numbers,
        'request': context['request'],
    }


@register.simple_tag(takes_context=True)
def append_to_get(context, **kwargs):
    get = context['request'].GET.copy()
    get.update(kwargs)
    return '?{1}'.format(urllib.urlencode(get))

## Instruction:
Use a py3 compatible urlencode
## Code After:

from django.utils.six.moves.urllib.parse import urlencode
from django import template

register = template.Library()

@register.inclusion_tag('bootstrap_paginator/paginator.html', takes_context=True)
def paginator(context, page=None):
    """
    Based on: http://djangosnippets.org/snippets/2680/

    To be used in conjunction with the object_list generic view.

    Adds pagination context variables for use in displaying first, adjacent and
    last page links in addition to those created by the object_list generic
    view.
    """
    adjacent_pages = 2

    page = context.get('page_obj', page)
    paginator = page.paginator

    startPage = page.number - adjacent_pages
    if startPage <= adjacent_pages + 1:
        startPage = 1
    endPage = page.number + adjacent_pages + 1

    page_numbers = [
        n for n in range(startPage, endPage)
        if n >= 1 and n <= paginator.num_pages
    ]

    return {
        'page': page,
        'paginator': paginator,
        'page_numbers': page_numbers,
        'show_first': 1 not in page_numbers,
        'show_last': paginator.num_pages not in page_numbers,
        'request': context['request'],
    }


@register.simple_tag(takes_context=True)
def append_to_get(context, **kwargs):
    get = context['request'].GET.copy()
    get.update(kwargs)
    return '?{1}'.format(urlencode(get))
