def get_extra_action_url_map(self): """ Build a map of {names: urls} for the extra actions. This method will noop if `detail` was not provided as a view initkwarg. """ action_urls = OrderedDict() # exit early if `detail` has not been provided if self.detail is None: return action_urls # filter for the relevant extra actions actions = [ action for action in self.get_extra_actions() if action.detail == self.detail ] for action in actions: try: url_name = '%s-%s' % (self.basename, action.url_name) url = reverse(url_name, self.args, self.kwargs, request=self.request) view = self.__class__(**action.kwargs) action_urls[view.get_view_name()] = url except NoReverseMatch: pass # URL requires additional arguments, ignore return action_urls
def reverse_action(self, url_name, *args, **kwargs): """ Reverse the action for the given `url_name`. """ url_name = '%s-%s' % (self.basename, url_name) kwargs.setdefault('request', self.request) return reverse(url_name, *args, **kwargs)
def get(self, request, *args, **kwargs): # Return a plain {"name": "hyperlink"} response. ret = OrderedDict() namespace = request.resolver_match.namespace for key, url_name in self.api_root_dict.items(): if namespace: url_name = namespace + ':' + url_name try: ret[key] = reverse(url_name, args=args, kwargs=kwargs, request=request, format=kwargs.get('format', None)) except NoReverseMatch: # Don't bail out if eg. no list routes exist, only detail routes. continue return Response(ret)
def get(self, request, *args, **kwargs): return Response({'url': reverse('another', request=request)})
def test_reverse_with_versioning_scheme_fallback_to_default_on_error(self): request = factory.get('/view') request.versioning_scheme = MockVersioningScheme(raise_error=True) url = reverse('view', request=request) assert url == 'http://testserver/view'
def test_reverse_with_versioning_scheme(self): request = factory.get('/view') request.versioning_scheme = MockVersioningScheme() url = reverse('view', request=request) assert url == 'http://scheme-reversed/view'
def test_reversed_urls_are_fully_qualified(self): request = factory.get('/view') url = reverse('view', request=request) assert url == 'http://testserver/view'