Reduced code duplication in creating page headers
The same line of code to add a page title to a template was repeated in many templates, this patch moves that line into the base.html, and also tries to standardize the way page titles are defined in the python. Change-Id: I11367d3007ebae727ba45446076a31307d477995 Closes-Bug: 1399840
This commit is contained in:
parent
c7123d3f57
commit
1934a7eaa8
|
@ -18,9 +18,9 @@ import os
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django import http
|
from django import http
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.views import generic
|
|
||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
|
from horizon import views
|
||||||
|
|
||||||
|
|
||||||
ADD_TO_FIELD_HEADER = "HTTP_X_HORIZON_ADD_TO_FIELD"
|
ADD_TO_FIELD_HEADER = "HTTP_X_HORIZON_ADD_TO_FIELD"
|
||||||
|
@ -77,7 +77,7 @@ class ModalFormMixin(object):
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class ModalFormView(ModalBackdropMixin, ModalFormMixin, generic.FormView):
|
class ModalFormView(ModalBackdropMixin, ModalFormMixin, views.HorizonFormView):
|
||||||
"""The main view class from which all views which handle forms in Horizon
|
"""The main view class from which all views which handle forms in Horizon
|
||||||
should inherit. It takes care of all details with processing
|
should inherit. It takes care of all details with processing
|
||||||
:class:`~horizon.forms.base.SelfHandlingForm` classes, and modal concerns
|
:class:`~horizon.forms.base.SelfHandlingForm` classes, and modal concerns
|
||||||
|
|
|
@ -15,7 +15,8 @@
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
from django import shortcuts
|
from django import shortcuts
|
||||||
from django.views import generic
|
|
||||||
|
from horizon import views
|
||||||
|
|
||||||
from horizon.templatetags.horizon import has_permissions # noqa
|
from horizon.templatetags.horizon import has_permissions # noqa
|
||||||
|
|
||||||
|
@ -125,7 +126,7 @@ class MultiTableMixin(object):
|
||||||
return handled
|
return handled
|
||||||
|
|
||||||
|
|
||||||
class MultiTableView(MultiTableMixin, generic.TemplateView):
|
class MultiTableView(MultiTableMixin, views.HorizonTemplateView):
|
||||||
"""A class-based generic view to handle the display and processing of
|
"""A class-based generic view to handle the display and processing of
|
||||||
multiple :class:`~horizon.tables.DataTable` classes in a single view.
|
multiple :class:`~horizon.tables.DataTable` classes in a single view.
|
||||||
|
|
||||||
|
@ -136,6 +137,7 @@ class MultiTableView(MultiTableMixin, generic.TemplateView):
|
||||||
which returns a set of data for that table; and specify a template for
|
which returns a set of data for that table; and specify a template for
|
||||||
the ``template_name`` attribute.
|
the ``template_name`` attribute.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def construct_tables(self):
|
def construct_tables(self):
|
||||||
tables = self.get_tables().values()
|
tables = self.get_tables().values()
|
||||||
# Early out before data is loaded
|
# Early out before data is loaded
|
||||||
|
|
|
@ -11,14 +11,14 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from django import http
|
from django import http
|
||||||
from django.views import generic
|
|
||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
from horizon.tabs.base import TableTab # noqa
|
from horizon.tabs.base import TableTab # noqa
|
||||||
|
from horizon import views
|
||||||
|
|
||||||
|
|
||||||
class TabView(generic.TemplateView):
|
class TabView(views.HorizonTemplateView):
|
||||||
"""A generic class-based view for displaying a
|
"""A generic class-based view for displaying a
|
||||||
:class:`horizon.tabs.TabGroup`.
|
:class:`horizon.tabs.TabGroup`.
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,9 @@
|
||||||
<div id='content_body'>
|
<div id='content_body'>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12">
|
<div class="col-xs-12">
|
||||||
{% block page_header %}{% endblock %}
|
{% block page_header %}
|
||||||
|
{% include "horizon/common/_page_header.html" with title=page_title %}
|
||||||
|
{% endblock %}
|
||||||
{% block main %}{% endblock %}
|
{% block main %}{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
# Copyright 2015 Cisco Systems, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
|
||||||
|
from horizon.test import helpers as test
|
||||||
|
from horizon import views
|
||||||
|
|
||||||
|
from django import forms
|
||||||
|
from django.test import client
|
||||||
|
from django.views import generic
|
||||||
|
|
||||||
|
FAKENAME = "FakeName"
|
||||||
|
|
||||||
|
|
||||||
|
class ViewData(object):
|
||||||
|
|
||||||
|
template_name = 'fake'
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(ViewData, self).get_context_data(**kwargs)
|
||||||
|
context['object'] = {'name': 'myName'}
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class PageWithNoTitle(ViewData, views.HorizonTemplateView):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class PageWithTitle(ViewData, views.HorizonTemplateView):
|
||||||
|
page_title = "A Title"
|
||||||
|
|
||||||
|
|
||||||
|
class PageWithTitleData(ViewData, views.HorizonTemplateView):
|
||||||
|
page_title = "A Title: {{ object.name }}"
|
||||||
|
|
||||||
|
|
||||||
|
class FormWithTitle(ViewData, views.HorizonFormView):
|
||||||
|
form_class = forms.Form
|
||||||
|
page_title = "A Title: {{ object.name }}"
|
||||||
|
|
||||||
|
|
||||||
|
class ViewWithTitle(views.PageTitleMixin, generic.TemplateView):
|
||||||
|
page_title = "Fake"
|
||||||
|
|
||||||
|
|
||||||
|
class PageTitleTests(test.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(PageTitleTests, self).setUp()
|
||||||
|
self.request = client.RequestFactory().get('fake')
|
||||||
|
|
||||||
|
def _dispatch(self, viewClass):
|
||||||
|
p = viewClass()
|
||||||
|
p.request = self.request
|
||||||
|
return p.dispatch(self.request)
|
||||||
|
|
||||||
|
def test_render_title(self):
|
||||||
|
tm = ViewWithTitle()
|
||||||
|
context = tm.render_title({})
|
||||||
|
self.assertEqual("Fake", context['page_title'])
|
||||||
|
|
||||||
|
def test_render_title_override(self):
|
||||||
|
tm = ViewWithTitle()
|
||||||
|
context = tm.render_title({'page_title': "ekaF"})
|
||||||
|
self.assertEqual("ekaF", context['page_title'])
|
||||||
|
|
||||||
|
def test_no_title_set(self):
|
||||||
|
res = self._dispatch(PageWithNoTitle)
|
||||||
|
self.assertEqual("", res.context_data['page_title'])
|
||||||
|
|
||||||
|
def test_title_set(self):
|
||||||
|
res = self._dispatch(PageWithTitle)
|
||||||
|
self.assertEqual("A Title", res.context_data['page_title'])
|
||||||
|
|
||||||
|
def test_title_with_data(self):
|
||||||
|
res = self._dispatch(PageWithTitleData)
|
||||||
|
self.assertEqual("A Title: myName", res.context_data['page_title'])
|
||||||
|
|
||||||
|
def test_form_with_title(self):
|
||||||
|
res = self._dispatch(FormWithTitle)
|
||||||
|
self.assertEqual("A Title: myName", res.context_data['page_title'])
|
|
@ -13,18 +13,44 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from django import shortcuts
|
from django import shortcuts
|
||||||
|
from django import template
|
||||||
from django.views import generic
|
from django.views import generic
|
||||||
|
|
||||||
import horizon
|
import horizon
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
|
|
||||||
|
|
||||||
|
class PageTitleMixin(object):
|
||||||
|
page_title = ""
|
||||||
|
|
||||||
|
def render_title(self, context):
|
||||||
|
if "page_title" not in context:
|
||||||
|
con = template.Context(context)
|
||||||
|
# NOTE(sambetts): Cast to unicode to ensure lazy translations
|
||||||
|
# are handled correctly.
|
||||||
|
temp = template.Template(unicode(self.page_title))
|
||||||
|
context["page_title"] = temp.render(con)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def render_to_response(self, context):
|
||||||
|
context = self.render_title(context)
|
||||||
|
return super(PageTitleMixin, self).render_to_response(context)
|
||||||
|
|
||||||
|
|
||||||
|
class HorizonTemplateView(PageTitleMixin, generic.TemplateView):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class HorizonFormView(PageTitleMixin, generic.FormView):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def user_home(request):
|
def user_home(request):
|
||||||
"""Reversible named view to direct a user to the appropriate homepage."""
|
"""Reversible named view to direct a user to the appropriate homepage."""
|
||||||
return shortcuts.redirect(horizon.get_user_home(request.user))
|
return shortcuts.redirect(horizon.get_user_home(request.user))
|
||||||
|
|
||||||
|
|
||||||
class APIView(generic.TemplateView):
|
class APIView(HorizonTemplateView):
|
||||||
"""A quick class-based view for putting API data into a template.
|
"""A quick class-based view for putting API data into a template.
|
||||||
|
|
||||||
Subclasses must define one method, ``get_data``, and a template name
|
Subclasses must define one method, ``get_data``, and a template name
|
||||||
|
@ -34,6 +60,7 @@ class APIView(generic.TemplateView):
|
||||||
the :func:`horizon.exceptions.handle` error handler if not otherwise
|
the :func:`horizon.exceptions.handle` error handler if not otherwise
|
||||||
caught.
|
caught.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_data(self, request, context, *args, **kwargs):
|
def get_data(self, request, context, *args, **kwargs):
|
||||||
"""This method should handle any necessary API calls, update the
|
"""This method should handle any necessary API calls, update the
|
||||||
context object, and return the context object at the end.
|
context object, and return the context object at the end.
|
||||||
|
|
|
@ -3,10 +3,6 @@
|
||||||
|
|
||||||
{% block title %}{% trans "Namespace Details" %}{% endblock %}
|
{% block title %}{% trans "Namespace Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=_("Namespace Details: ")|add:namespace.namespace|default:_("None") %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -86,9 +86,9 @@ class CreateView(forms.ModalFormView):
|
||||||
|
|
||||||
class DetailView(tabs.TabView):
|
class DetailView(tabs.TabView):
|
||||||
redirect_url = constants.METADATA_INDEX_URL
|
redirect_url = constants.METADATA_INDEX_URL
|
||||||
|
|
||||||
tab_group_class = admin_tabs.NamespaceDetailTabs
|
tab_group_class = admin_tabs.NamespaceDetailTabs
|
||||||
template_name = constants.METADATA_DETAIL_TEMPLATE
|
template_name = constants.METADATA_DETAIL_TEMPLATE
|
||||||
|
page_title = _("Namespace Details: {{ namespace.namespace }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Usage Overview" %}{% endblock %}
|
{% block title %}{% trans "Usage Overview" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=_("Overview") %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
{% if monitoring %}
|
{% if monitoring %}
|
||||||
<div id="monitoring">
|
<div id="monitoring">
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Volume Details" %}{% endblock %}
|
{% block title %}{% trans "Volume Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -28,14 +28,6 @@ from openstack_dashboard.dashboards.project.volumes.volumes \
|
||||||
class DetailView(volumes_views.DetailView):
|
class DetailView(volumes_views.DetailView):
|
||||||
template_name = "admin/volumes/volumes/detail.html"
|
template_name = "admin/volumes/volumes/detail.html"
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
|
||||||
volume = context["volume"]
|
|
||||||
context["page_title"] = _("Volume Details: "
|
|
||||||
"%(volume_name)s") % {'volume_name':
|
|
||||||
volume.name}
|
|
||||||
return context
|
|
||||||
|
|
||||||
def get_redirect_url(self):
|
def get_redirect_url(self):
|
||||||
return reverse('horizon:admin:volumes:index')
|
return reverse('horizon:admin:volumes:index')
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans 'Group Management' %}{% endblock %}
|
{% block title %}{% trans 'Group Management' %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
{{ group_members_table.render }}
|
{{ group_members_table.render }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -120,14 +120,11 @@ class GroupManageMixin(object):
|
||||||
class ManageMembersView(GroupManageMixin, tables.DataTableView):
|
class ManageMembersView(GroupManageMixin, tables.DataTableView):
|
||||||
table_class = project_tables.GroupMembersTable
|
table_class = project_tables.GroupMembersTable
|
||||||
template_name = constants.GROUPS_MANAGE_VIEW_TEMPLATE
|
template_name = constants.GROUPS_MANAGE_VIEW_TEMPLATE
|
||||||
|
page_title = _("Group Management: {{ group.name }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(ManageMembersView, self).get_context_data(**kwargs)
|
context = super(ManageMembersView, self).get_context_data(**kwargs)
|
||||||
group = self._get_group()
|
context['group'] = self._get_group()
|
||||||
context['group'] = group
|
|
||||||
context['page_title'] = _("Group Management: "
|
|
||||||
"%(group_name)s") % {'group_name':
|
|
||||||
group.name}
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
|
|
|
@ -40,6 +40,8 @@ from openstack_dashboard.dashboards.project.access_and_security.\
|
||||||
class DetailView(tables.DataTableView):
|
class DetailView(tables.DataTableView):
|
||||||
table_class = project_tables.RulesTable
|
table_class = project_tables.RulesTable
|
||||||
template_name = 'project/access_and_security/security_groups/detail.html'
|
template_name = 'project/access_and_security/security_groups/detail.html'
|
||||||
|
page_title = _("Manage Security Group Rules: "
|
||||||
|
"{{ security_group.name }} ({{ security_group.id }})")
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
def _get_data(self):
|
def _get_data(self):
|
||||||
|
@ -61,13 +63,7 @@ class DetailView(tables.DataTableView):
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
security_group = self._get_data()
|
context["security_group"] = self._get_data()
|
||||||
security_group_name_id = "%s (%s)" % (security_group.name,
|
|
||||||
security_group.id)
|
|
||||||
context["security_group"] = security_group
|
|
||||||
context["page_title"] = _(
|
|
||||||
"Manage Security Group Rules: %(security_group)s") % {
|
|
||||||
'security_group': security_group_name_id}
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Manage Security Group Rules" %}{% endblock %}
|
{% block title %}{% trans "Manage Security Group Rules" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n sizeformat %}
|
{% load i18n sizeformat %}
|
||||||
{% block title %}{% trans "Backup Details" %}{% endblock %}
|
{% block title %}{% trans "Backup Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -75,6 +75,7 @@ class BackupView(horizon_workflows.WorkflowView):
|
||||||
|
|
||||||
class DetailView(horizon_views.APIView):
|
class DetailView(horizon_views.APIView):
|
||||||
template_name = "project/database_backups/details.html"
|
template_name = "project/database_backups/details.html"
|
||||||
|
page_title = _("Backup Details: {{ backup.name }}")
|
||||||
|
|
||||||
def get_data(self, request, context, *args, **kwargs):
|
def get_data(self, request, context, *args, **kwargs):
|
||||||
backup_id = kwargs.get("backup_id")
|
backup_id = kwargs.get("backup_id")
|
||||||
|
@ -103,8 +104,4 @@ class DetailView(horizon_views.APIView):
|
||||||
instance = None
|
instance = None
|
||||||
context['backup'] = backup
|
context['backup'] = backup
|
||||||
context['instance'] = instance
|
context['instance'] = instance
|
||||||
context['page_title'] = _("Backup Details: "
|
|
||||||
"%(backup_name)s") % {'backup_name':
|
|
||||||
backup.name}
|
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n sizeformat %}
|
{% load i18n sizeformat %}
|
||||||
{% block title %}{% trans "Instance Details" %}{% endblock %}
|
{% block title %}{% trans "Instance Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -96,6 +96,7 @@ class LaunchInstanceView(horizon_workflows.WorkflowView):
|
||||||
class DetailView(horizon_tabs.TabbedTableView):
|
class DetailView(horizon_tabs.TabbedTableView):
|
||||||
tab_group_class = tabs.InstanceDetailTabs
|
tab_group_class = tabs.InstanceDetailTabs
|
||||||
template_name = 'project/databases/detail.html'
|
template_name = 'project/databases/detail.html'
|
||||||
|
page_title = _("Instance Details: {{ instance.name }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -104,9 +105,6 @@ class DetailView(horizon_tabs.TabbedTableView):
|
||||||
context["instance"] = instance
|
context["instance"] = instance
|
||||||
context["url"] = self.get_redirect_url()
|
context["url"] = self.get_redirect_url()
|
||||||
context["actions"] = table.render_row_actions(instance)
|
context["actions"] = table.render_row_actions(instance)
|
||||||
context["page_title"] = _("Instance Details: "
|
|
||||||
"%(instance_name)s") % {'instance_name':
|
|
||||||
instance.name}
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Edit Firewall" %}{% endblock %}
|
{% block title %}{% trans "Edit Firewall" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
{% include 'project/firewalls/_updatefirewall.html' %}
|
{% include 'project/firewalls/_updatefirewall.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Edit Policy" %}{% endblock %}
|
{% block title %}{% trans "Edit Policy" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
{% include 'project/firewalls/_updatepolicy.html' %}
|
{% include 'project/firewalls/_updatepolicy.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Edit Rule" %}{% endblock %}
|
{% block title %}{% trans "Edit Rule" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
{% include 'project/firewalls/_updaterule.html' %}
|
{% include 'project/firewalls/_updaterule.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -121,12 +121,12 @@ class UpdateRuleView(forms.ModalFormView):
|
||||||
template_name = "project/firewalls/updaterule.html"
|
template_name = "project/firewalls/updaterule.html"
|
||||||
context_object_name = 'rule'
|
context_object_name = 'rule'
|
||||||
success_url = reverse_lazy("horizon:project:firewalls:index")
|
success_url = reverse_lazy("horizon:project:firewalls:index")
|
||||||
|
page_title = _("Edit Rule")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdateRuleView, self).get_context_data(**kwargs)
|
context = super(UpdateRuleView, self).get_context_data(**kwargs)
|
||||||
context['rule_id'] = self.kwargs['rule_id']
|
context['rule_id'] = self.kwargs['rule_id']
|
||||||
obj = self._get_object()
|
obj = self._get_object()
|
||||||
context['page_title'] = _("Edit Rule")
|
|
||||||
if obj:
|
if obj:
|
||||||
context['name'] = obj.name_or_id
|
context['name'] = obj.name_or_id
|
||||||
context['page_title'] = _("Edit Rule "
|
context['page_title'] = _("Edit Rule "
|
||||||
|
@ -159,12 +159,12 @@ class UpdatePolicyView(forms.ModalFormView):
|
||||||
template_name = "project/firewalls/updatepolicy.html"
|
template_name = "project/firewalls/updatepolicy.html"
|
||||||
context_object_name = 'policy'
|
context_object_name = 'policy'
|
||||||
success_url = reverse_lazy("horizon:project:firewalls:index")
|
success_url = reverse_lazy("horizon:project:firewalls:index")
|
||||||
|
page_title = _("Edit Policy")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdatePolicyView, self).get_context_data(**kwargs)
|
context = super(UpdatePolicyView, self).get_context_data(**kwargs)
|
||||||
context["policy_id"] = self.kwargs['policy_id']
|
context["policy_id"] = self.kwargs['policy_id']
|
||||||
obj = self._get_object()
|
obj = self._get_object()
|
||||||
context['page_title'] = _("Edit Policy")
|
|
||||||
if obj:
|
if obj:
|
||||||
context['name'] = obj.name_or_id
|
context['name'] = obj.name_or_id
|
||||||
context['page_title'] = _("Edit Policy %s") % obj.name
|
context['page_title'] = _("Edit Policy %s") % obj.name
|
||||||
|
@ -192,12 +192,12 @@ class UpdateFirewallView(forms.ModalFormView):
|
||||||
template_name = "project/firewalls/updatefirewall.html"
|
template_name = "project/firewalls/updatefirewall.html"
|
||||||
context_object_name = 'firewall'
|
context_object_name = 'firewall'
|
||||||
success_url = reverse_lazy("horizon:project:firewalls:index")
|
success_url = reverse_lazy("horizon:project:firewalls:index")
|
||||||
|
page_title = _("Edit Firewall")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdateFirewallView, self).get_context_data(**kwargs)
|
context = super(UpdateFirewallView, self).get_context_data(**kwargs)
|
||||||
context["firewall_id"] = self.kwargs['firewall_id']
|
context["firewall_id"] = self.kwargs['firewall_id']
|
||||||
obj = self._get_object()
|
obj = self._get_object()
|
||||||
context['page_title'] = _("Edit Firewall")
|
|
||||||
if obj:
|
if obj:
|
||||||
context['name'] = obj.name
|
context['name'] = obj.name
|
||||||
context['page_title'] = _("Edit Firewall %s") % obj.name
|
context['page_title'] = _("Edit Firewall %s") % obj.name
|
||||||
|
|
|
@ -83,6 +83,7 @@ class UpdateView(forms.ModalFormView):
|
||||||
class DetailView(tabs.TabView):
|
class DetailView(tabs.TabView):
|
||||||
tab_group_class = project_tabs.ImageDetailTabs
|
tab_group_class = project_tabs.ImageDetailTabs
|
||||||
template_name = 'project/images/images/detail.html'
|
template_name = 'project/images/images/detail.html'
|
||||||
|
page_title = _("Image Details: {{ image.name }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -91,9 +92,6 @@ class DetailView(tabs.TabView):
|
||||||
context["image"] = image
|
context["image"] = image
|
||||||
context["url"] = self.get_redirect_url()
|
context["url"] = self.get_redirect_url()
|
||||||
context["actions"] = table.render_row_actions(image)
|
context["actions"] = table.render_row_actions(image)
|
||||||
context["page_title"] = _("Image Details: "
|
|
||||||
"%(image_name)s") % {'image_name':
|
|
||||||
image.name}
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -3,10 +3,6 @@
|
||||||
|
|
||||||
{% block title %}{% trans "Image Details"%}{% endblock %}
|
{% block title %}{% trans "Image Details"%}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n sizeformat %}
|
{% load i18n sizeformat %}
|
||||||
{% block title %}{% trans "Instance Details" %}{% endblock %}
|
{% block title %}{% trans "Instance Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -252,6 +252,7 @@ class DetailView(tabs.TabView):
|
||||||
tab_group_class = project_tabs.InstanceDetailTabs
|
tab_group_class = project_tabs.InstanceDetailTabs
|
||||||
template_name = 'project/instances/detail.html'
|
template_name = 'project/instances/detail.html'
|
||||||
redirect_url = 'horizon:project:instances:index'
|
redirect_url = 'horizon:project:instances:index'
|
||||||
|
page_title = _("Instance Details: {{ instance.name }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -260,9 +261,6 @@ class DetailView(tabs.TabView):
|
||||||
table = project_tables.InstancesTable(self.request)
|
table = project_tables.InstancesTable(self.request)
|
||||||
context["url"] = reverse(self.redirect_url)
|
context["url"] = reverse(self.redirect_url)
|
||||||
context["actions"] = table.render_row_actions(instance)
|
context["actions"] = table.render_row_actions(instance)
|
||||||
context["page_title"] = _("Instance Details: "
|
|
||||||
"%(instance_name)s") % {'instance_name':
|
|
||||||
instance.name}
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Network Details"%}{% endblock %}
|
{% block title %}{% trans "Network Details"%}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -94,6 +94,7 @@ class UpdateView(forms.ModalFormView):
|
||||||
class DetailView(tables.MultiTableView):
|
class DetailView(tables.MultiTableView):
|
||||||
table_classes = (subnet_tables.SubnetsTable, port_tables.PortsTable)
|
table_classes = (subnet_tables.SubnetsTable, port_tables.PortsTable)
|
||||||
template_name = 'project/networks/detail.html'
|
template_name = 'project/networks/detail.html'
|
||||||
|
page_title = _("Network Details: {{ network.name }}")
|
||||||
|
|
||||||
def get_subnets_data(self):
|
def get_subnets_data(self):
|
||||||
try:
|
try:
|
||||||
|
@ -136,9 +137,6 @@ class DetailView(tables.MultiTableView):
|
||||||
table = project_tables.NetworksTable(self.request)
|
table = project_tables.NetworksTable(self.request)
|
||||||
context["url"] = self.get_redirect_url()
|
context["url"] = self.get_redirect_url()
|
||||||
context["actions"] = table.render_row_actions(network)
|
context["actions"] = table.render_row_actions(network)
|
||||||
context["page_title"] = _("Network Details: "
|
|
||||||
"%(network_name)s") % {'network_name':
|
|
||||||
network.name}
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Instance Overview" %}{% endblock %}
|
{% block title %}{% trans "Instance Overview" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=_("Overview") %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
{% include "horizon/common/_limit_summary.html" %}
|
{% include "horizon/common/_limit_summary.html" %}
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n sizeformat %}
|
{% load i18n sizeformat %}
|
||||||
{% block title %}{% trans "Stack Details" %}{% endblock %}
|
{% block title %}{% trans "Stack Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n sizeformat %}
|
{% load i18n sizeformat %}
|
||||||
{% block title %}{% trans "Resource Details" %}{% endblock %}
|
{% block title %}{% trans "Resource Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -196,6 +196,7 @@ class EditStackView(CreateStackView):
|
||||||
class DetailView(tabs.TabView):
|
class DetailView(tabs.TabView):
|
||||||
tab_group_class = project_tabs.StackDetailTabs
|
tab_group_class = project_tabs.StackDetailTabs
|
||||||
template_name = 'project/stacks/detail.html'
|
template_name = 'project/stacks/detail.html'
|
||||||
|
page_title = _("Stack Details: {{ stack.stack_name }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -204,9 +205,6 @@ class DetailView(tabs.TabView):
|
||||||
context["stack"] = stack
|
context["stack"] = stack
|
||||||
context["url"] = self.get_redirect_url()
|
context["url"] = self.get_redirect_url()
|
||||||
context["actions"] = table.render_row_actions(stack)
|
context["actions"] = table.render_row_actions(stack)
|
||||||
context["page_title"] = _("Stack Details: "
|
|
||||||
"%(stack_name)s") % {'stack_name':
|
|
||||||
stack.stack_name}
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
|
|
@ -45,6 +45,7 @@ class CreateBackupView(forms.ModalFormView):
|
||||||
class BackupDetailView(tabs.TabView):
|
class BackupDetailView(tabs.TabView):
|
||||||
tab_group_class = backup_tabs.BackupDetailTabs
|
tab_group_class = backup_tabs.BackupDetailTabs
|
||||||
template_name = 'project/volumes/backups/detail.html'
|
template_name = 'project/volumes/backups/detail.html'
|
||||||
|
page_title = _("Volume Backup Details: {{ backup.name }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(BackupDetailView, self).get_context_data(**kwargs)
|
context = super(BackupDetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -53,10 +54,6 @@ class BackupDetailView(tabs.TabView):
|
||||||
context["backup"] = backup
|
context["backup"] = backup
|
||||||
context["url"] = self.get_redirect_url()
|
context["url"] = self.get_redirect_url()
|
||||||
context["actions"] = table.render_row_actions(backup)
|
context["actions"] = table.render_row_actions(backup)
|
||||||
context["page_title"] = _("Volume Backup Details: "
|
|
||||||
"%(backup_name)s") % {'backup_name':
|
|
||||||
backup.name}
|
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
|
|
@ -61,6 +61,7 @@ class UpdateView(forms.ModalFormView):
|
||||||
class DetailView(tabs.TabView):
|
class DetailView(tabs.TabView):
|
||||||
tab_group_class = vol_snapshot_tabs.SnapshotDetailTabs
|
tab_group_class = vol_snapshot_tabs.SnapshotDetailTabs
|
||||||
template_name = 'project/volumes/snapshots/detail.html'
|
template_name = 'project/volumes/snapshots/detail.html'
|
||||||
|
page_title = _("Volume Snapshot Details: {{ snapshot.name }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -69,9 +70,6 @@ class DetailView(tabs.TabView):
|
||||||
context["snapshot"] = snapshot
|
context["snapshot"] = snapshot
|
||||||
context["url"] = self.get_redirect_url()
|
context["url"] = self.get_redirect_url()
|
||||||
context["actions"] = table.render_row_actions(snapshot)
|
context["actions"] = table.render_row_actions(snapshot)
|
||||||
context["page_title"] = _("Volume Snapshot Details: "
|
|
||||||
"%(snapshot_name)s") % {'snapshot_name':
|
|
||||||
snapshot.name}
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
|
|
@ -2,9 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Volume Backup Details" %}{% endblock %}
|
{% block title %}{% trans "Volume Backup Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -2,9 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Volume Snapshot Details" %}{% endblock %}
|
{% block title %}{% trans "Volume Snapshot Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block title %}{% trans "Volume Details" %}{% endblock %}
|
{% block title %}{% trans "Volume Details" %}{% endblock %}
|
||||||
|
|
||||||
{% block page_header %}
|
|
||||||
{% include "horizon/common/_page_header.html" with title=page_title %}
|
|
||||||
{% endblock page_header %}
|
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
|
@ -43,6 +43,7 @@ from openstack_dashboard.dashboards.project.volumes \
|
||||||
class DetailView(tabs.TabView):
|
class DetailView(tabs.TabView):
|
||||||
tab_group_class = project_tabs.VolumeDetailTabs
|
tab_group_class = project_tabs.VolumeDetailTabs
|
||||||
template_name = 'project/volumes/volumes/detail.html'
|
template_name = 'project/volumes/volumes/detail.html'
|
||||||
|
page_title = _("Volume Details: {{ volume.name }}")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -51,10 +52,6 @@ class DetailView(tabs.TabView):
|
||||||
context["volume"] = volume
|
context["volume"] = volume
|
||||||
context["url"] = self.get_redirect_url()
|
context["url"] = self.get_redirect_url()
|
||||||
context["actions"] = table.render_row_actions(volume)
|
context["actions"] = table.render_row_actions(volume)
|
||||||
context["page_title"] = _("Volume Details: "
|
|
||||||
"%(volume_name)s") % {'volume_name':
|
|
||||||
volume.name}
|
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
|
|
@ -22,6 +22,7 @@ class UsageView(tables.DataTableView):
|
||||||
usage_class = None
|
usage_class = None
|
||||||
show_terminated = True
|
show_terminated = True
|
||||||
csv_template_name = None
|
csv_template_name = None
|
||||||
|
page_title = _("Overview")
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(UsageView, self).__init__(*args, **kwargs)
|
super(UsageView, self).__init__(*args, **kwargs)
|
||||||
|
@ -72,6 +73,7 @@ class UsageView(tables.DataTableView):
|
||||||
response_kwargs.setdefault("filename", "usage.csv")
|
response_kwargs.setdefault("filename", "usage.csv")
|
||||||
else:
|
else:
|
||||||
render_class = self.response_class
|
render_class = self.response_class
|
||||||
|
context = self.render_title(context)
|
||||||
resp = render_class(request=self.request,
|
resp = render_class(request=self.request,
|
||||||
template=self.get_template_names(),
|
template=self.get_template_names(),
|
||||||
context=context,
|
context=context,
|
||||||
|
|
Loading…
Reference in New Issue