Preserve format query param

This commit is contained in:
Tom Christie 2015-05-15 09:18:45 +01:00
parent 9424e59b9e
commit b4d82a0f55
3 changed files with 14 additions and 11 deletions

View File

@ -6,6 +6,8 @@ from django.core.urlresolvers import reverse as django_reverse
from django.core.urlresolvers import NoReverseMatch from django.core.urlresolvers import NoReverseMatch
from django.utils import six from django.utils import six
from django.utils.functional import lazy from django.utils.functional import lazy
from rest_framework.settings import api_settings
from rest_framework.utils.urls import replace_query_param
def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra): def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra):
@ -17,14 +19,18 @@ def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra
scheme = getattr(request, 'versioning_scheme', None) scheme = getattr(request, 'versioning_scheme', None)
if scheme is not None: if scheme is not None:
try: try:
return scheme.reverse(viewname, args, kwargs, request, format, **extra) url = scheme.reverse(viewname, args, kwargs, request, format, **extra)
except NoReverseMatch: except NoReverseMatch:
# In case the versioning scheme reversal fails, fallback to the # In case the versioning scheme reversal fails, fallback to the
# default implementation # default implementation
pass url = _reverse(viewname, args, kwargs, request, format, **extra)
else:
return _reverse(viewname, args, kwargs, request, format, **extra) url = _reverse(viewname, args, kwargs, request, format, **extra)
FORMAT_OVERRIDE = api_settings.URL_FORMAT_OVERRIDE
if FORMAT_OVERRIDE and (FORMAT_OVERRIDE in request.query_params):
return replace_query_param(url, FORMAT_OVERRIDE, request.query_params[FORMAT_OVERRIDE])
return url
def _reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra): def _reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra):
""" """

View File

@ -3,7 +3,7 @@
content running up underneath it. */ content running up underneath it. */
h1 { h1 {
font-weight: 500; font-weight: 300;
} }
h2, h3 { h2, h3 {

View File

@ -73,18 +73,15 @@
<form id="get-form" class="pull-right"> <form id="get-form" class="pull-right">
<fieldset> <fieldset>
<div class="btn-group format-selection"> <div class="btn-group format-selection">
<a class="btn btn-primary" href='{{ request.get_full_path }}'>Format</a>
<button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span> Format <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{% for format in available_formats %} {% for format in available_formats %}
<li> <li>
<a class="js-tooltip format-option" <a class="format-option"
href='{% add_query_param request api_settings.URL_FORMAT_OVERRIDE format %}' href='{% add_query_param request api_settings.URL_FORMAT_OVERRIDE format %}'
rel="nofollow" rel="nofollow">
title="Make a GET request on the {{ name }} resource with the format set to `{{ format }}`">
{{ format }} {{ format }}
</a> </a>
</li> </li>