Render the HTML for the browsable API representation.
(self, data, accepted_media_type, renderer_context)
| 805 | return ret |
| 806 | |
| 807 | def get_context(self, data, accepted_media_type, renderer_context): |
| 808 | """ |
| 809 | Render the HTML for the browsable API representation. |
| 810 | """ |
| 811 | context = super().get_context( |
| 812 | data, accepted_media_type, renderer_context |
| 813 | ) |
| 814 | |
| 815 | paginator = getattr(context['view'], 'paginator', None) |
| 816 | if paginator is not None and data is not None: |
| 817 | try: |
| 818 | results = paginator.get_results(data) |
| 819 | except (TypeError, KeyError): |
| 820 | results = data |
| 821 | else: |
| 822 | results = data |
| 823 | |
| 824 | if results is None: |
| 825 | header = {} |
| 826 | style = 'detail' |
| 827 | elif isinstance(results, list): |
| 828 | header = results[0] if results else {} |
| 829 | style = 'list' |
| 830 | else: |
| 831 | header = results |
| 832 | style = 'detail' |
| 833 | |
| 834 | columns = [key for key in header if key != 'url'] |
| 835 | details = [key for key in header if key != 'url'] |
| 836 | |
| 837 | if isinstance(results, list) and 'view' in renderer_context: |
| 838 | for result in results: |
| 839 | url = self.get_result_url(result, context['view']) |
| 840 | if url is not None: |
| 841 | result.setdefault('url', url) |
| 842 | |
| 843 | context['style'] = style |
| 844 | context['columns'] = columns |
| 845 | context['details'] = details |
| 846 | context['results'] = results |
| 847 | context['error_form'] = getattr(self, 'error_form', None) |
| 848 | context['error_title'] = getattr(self, 'error_title', None) |
| 849 | return context |
| 850 | |
| 851 | def get_result_url(self, result, view): |
| 852 | """ |