Misc cleanup for layouts

This commit is contained in:
Jeremy Stretch
2026-04-02 10:01:05 -04:00
parent bd45f6e4d1
commit 68bc97c24c
4 changed files with 44 additions and 5 deletions

View File

@@ -192,8 +192,14 @@ class DataFileView(generic.ObjectView):
layout.Column(
panels.DataFilePanel(),
panels.DataFileContentPanel(),
PluginContentPanel('left_page'),
),
),
layout.Row(
layout.Column(
PluginContentPanel('full_width_page'),
)
),
)

View File

@@ -16,6 +16,7 @@ from netbox.ui.panels import (
CommentsPanel,
ContextTablePanel,
ObjectsTablePanel,
PluginContentPanel,
RelatedObjectsPanel,
TemplatePanel,
)
@@ -55,11 +56,13 @@ class VRFView(GetRelatedModelsMixin, generic.ObjectView):
layout.Column(
panels.VRFPanel(),
TagsPanel(),
PluginContentPanel('left_page'),
),
layout.Column(
RelatedObjectsPanel(),
CustomFieldsPanel(),
CommentsPanel(),
PluginContentPanel('right_page'),
),
),
layout.Row(
@@ -70,6 +73,11 @@ class VRFView(GetRelatedModelsMixin, generic.ObjectView):
ContextTablePanel('export_targets_table', title=_('Export route targets')),
),
),
layout.Row(
layout.Column(
PluginContentPanel('full_width_page'),
),
),
)
def get_extra_context(self, request, instance):
@@ -169,10 +177,12 @@ class RouteTargetView(generic.ObjectView):
layout.Column(
panels.RouteTargetPanel(),
TagsPanel(),
PluginContentPanel('left_page'),
),
layout.Column(
CustomFieldsPanel(),
CommentsPanel(),
PluginContentPanel('right_page'),
),
),
layout.Row(
@@ -207,6 +217,11 @@ class RouteTargetView(generic.ObjectView):
),
),
),
layout.Row(
layout.Column(
PluginContentPanel('full_width_page'),
),
),
)

View File

@@ -21,10 +21,16 @@ class Layout:
"""
def __init__(self, *rows):
for i, row in enumerate(rows):
if type(row) is not Row:
if not isinstance(row, Row):
raise TypeError(f"Row {i} must be a Row instance, not {type(row)}.")
self.rows = rows
def __iter__(self):
return iter(self.rows)
def __repr__(self):
return f"Layout({len(self.rows)} rows)"
class Row:
"""
@@ -35,10 +41,16 @@ class Row:
"""
def __init__(self, *columns):
for i, column in enumerate(columns):
if type(column) is not Column:
if not isinstance(column, Column):
raise TypeError(f"Column {i} must be a Column instance, not {type(column)}.")
self.columns = columns
def __iter__(self):
return iter(self.columns)
def __repr__(self):
return f"Row({len(self.columns)} columns)"
class Column:
"""
@@ -53,6 +65,12 @@ class Column:
raise TypeError(f"Panel {i} must be an instance of a Panel, not {type(panel)}.")
self.panels = panels
def __iter__(self):
return iter(self.panels)
def __repr__(self):
return f"Column({len(self.panels)} panels)"
#
# Common layouts

View File

@@ -124,11 +124,11 @@ Context:
{% block content %}
{# Render panel layout declared on view class #}
{% for row in layout.rows %}
{% for row in layout %}
<div class="row">
{% for column in row.columns %}
{% for column in row %}
<div class="col">
{% for panel in column.panels %}
{% for panel in column %}
{% render panel %}
{% endfor %}
</div>