diff --git a/netbox/dcim/templatetags/display_region.py b/netbox/dcim/templatetags/display_region.py
index 53ad159ea..933d6ecbe 100644
--- a/netbox/dcim/templatetags/display_region.py
+++ b/netbox/dcim/templatetags/display_region.py
@@ -3,48 +3,35 @@ from django.utils.safestring import mark_safe
register = template.Library()
+
def _display_site(obj):
"""
Render a link to the site of an object.
"""
- if hasattr(obj, 'site'):
- return mark_safe('{}'.format(
- obj.site.get_absolute_url(),
- obj.site
- ))
- return None
+ site = getattr(obj, 'site', None)
+ return mark_safe('{}'.format(site.get_absolute_url(), site)) if site else None
@register.simple_tag(takes_context=True)
def display_region(context, obj, include_site=False):
"""
- Renders hierarchical region data for a given object.
+ Renders hierarchical region data for a given object, optionally including the site.
"""
- # Attempt to retrieve the region from obj or its site attribute
- region = getattr(obj, 'region', None) or getattr(getattr(obj, 'site', None), 'region', None)
+ # Retrieve the region or site information
+ region = getattr(obj, 'region', None) or getattr(obj.site, 'region', None) if hasattr(obj, 'site') else None
+ site_link = _display_site(obj) if include_site else None
- # Return a placeholder if no region is found
- if not region:
- # If include_site is True, attempt to retrieve the site from obj
- if include_site:
- return _display_site(obj) or mark_safe('—')
+ # Return a placeholder if no region or site is found
+ if not region and not site_link:
return mark_safe('—')
- # Retrieve all regions in the hierarchy
- regions = region.get_ancestors(include_self=True)
+ # Build the region links if the region is available
+ region_links = ' / '.join(
+ '{}'.format(context['request'].build_absolute_uri(reg.get_absolute_url()), reg)
+ for reg in region.get_ancestors(include_self=True)
+ ) if region else ''
- # Build the URLs and names for the regions
- regions_links = [
- '{}'.format(
- context['request'].build_absolute_uri(region.get_absolute_url()), region
- ) for region in regions
- ]
+ # Concatenate region and site links
+ links = ' / '.join(filter(None, [region_links, site_link]))
- # Render the hierarchy as a list of links
- region = mark_safe(' / '.join(regions_links))
- if include_site:
- site = _display_site(obj)
- if site:
- return mark_safe('{} / {}'.format(region, site))
-
- return region
+ return mark_safe(links)