@permission_required('django_spire_metric_visual.view_visual')
def detail_view(request: WSGIRequest, pk: int) -> TemplateResponse:
visual = get_object_or_404(models.Visual.objects.with_statistic().with_conditions(), pk=pk)
nav = VisualNavigation()
nav.page_title = str(visual)
nav.breadcrumbs.add('Visuals', 'django_spire:metric:visual:page:list')
nav.breadcrumbs.add(str(visual))
context = nav.as_context()
context.update(_visual_context(request, visual))
context['period_start'], context['period_end'] = visual.services.transformation.date_range()
return TemplateResponse(
request, context=context, template='django_spire/metric/visual/page/detail_page.html'
)