Enable to refresh ngdetails view

For now, refreshing ngdetails view by browser using F5 key or reload
button, it causes 404 error from django. To fix this issue, this patch
adds the url for '/ngdetails' into django.

To reproduce navigations, each request for views.py requires
'dashboard' and 'panel' object. Otherwise django side returns
500 error.

However the URL for request of details page (i.e. /ngdetails/)
can not provide informations to set the proper navigation.

So this patch set them to default dashboard and default panel.

This patch focuses to prevent 500 error. So the issue for
settings of proper navigation will be fixed by subsequent patch.

Change-Id: Ib9f1fe48b3cdecff5ad56e68a5ba58a41cb35f38
Closes-Bug: #1681627
This commit is contained in:
Shu Muto 2017-11-16 16:55:46 +09:00 committed by Akihiro Motoki
parent 7c087f0cad
commit 077163a03c
5 changed files with 48 additions and 0 deletions

View File

@ -866,6 +866,13 @@ class Site(Registry, HorizonComponent):
urlpatterns.append(url(r'^%s/' % dash.slug,
include(dash._decorated_urls)))
# add URL for ngdetails
views = import_module('horizon.browsers.views')
urlpatterns.append(url(r'^ngdetails/',
views.AngularDetailsView.as_view(),
name='ngdetails'))
_decorate_urlconf(urlpatterns, require_auth)
# Return the three arguments to django.conf.urls.include
return urlpatterns, self.namespace, self.slug

View File

@ -15,6 +15,7 @@
from django.utils.translation import ugettext_lazy as _
from django.views import generic
import horizon
from horizon.tables import MultiTableView
from horizon.utils import memoized
@ -83,3 +84,23 @@ class AngularIndexView(generic.TemplateView):
else:
context["page_title"] = self.page_title
return context
class AngularDetailsView(generic.TemplateView):
'''View for Angularized details view
This is used to load ngdetails view via Django.
i.e. refresh or link directly for '^ngdetails/'
'''
template_name = 'angular.html'
def get_context_data(self, **kwargs):
context = super(AngularDetailsView, self).get_context_data(**kwargs)
# some parameters are needed for navigation side bar and breadcrumb.
title = _("Horizon")
context["title"] = title
context["page_title"] = title
dashboard = horizon.get_default_dashboard()
self.request.horizon['dashboard'] = dashboard
self.request.horizon['panel'] = dashboard.get_panels()[0]
return context

View File

@ -327,6 +327,12 @@ class HorizonTests(BaseHorizonTests):
# Restore settings
settings.SECURE_PROXY_SSL_HEADER = None
def test_urls_ngdetails(self):
resp = self.client.get("/ngdetails/")
self.assertEqual(200, resp.status_code)
resp = self.client.get("/ngdetails/OS::Glance::Image/xxxxx-xxx")
self.assertEqual(200, resp.status_code)
class GetUserHomeTests(BaseHorizonTests):
"""Test get_user_home parameters."""

View File

@ -0,0 +1,14 @@
---
issues:
- |
[:bug:`1746706`] When reloading or opening Angular-based detail page
directly, the navigation menu and breadcrumb list are not recovered
properly and the first panel is focused.
[:bug:`1746709`] when we try to open non-existing Angular-based detail
page, "Not Found" (404) page is not shown. A blank page only with
the navigation menu will be shown.
fixes:
- |
[:bug:`1681627`] A problem that Angular-based detail page (ngdetail page)
cannot be reloaded or opened via direct URL has been fixed. Note that
there are some known issues described in the `Known Issues`_ section.