diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index 13cc60af0..253208cbf 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -193,14 +193,16 @@ class RSSFeedWidget(DashboardWidget): return f'dashboard_rss_{url_checksum}' def get_feed(self): - # Fetch RSS content from cache + # Fetch RSS content from cache if available if feed_content := cache.get(self.cache_key): feed = feedparser.FeedParserDict(feed_content) else: feed = feedparser.parse(self.config['feed_url']) - # Cap number of entries - max_entries = self.config.get('max_entries') - feed['entries'] = feed['entries'][:max_entries] - cache.set(self.cache_key, dict(feed), self.config.get('cache_timeout')) + if not feed.bozo: + # Cap number of entries + max_entries = self.config.get('max_entries') + feed['entries'] = feed['entries'][:max_entries] + # Cache the feed content + cache.set(self.cache_key, dict(feed), self.config.get('cache_timeout')) return feed diff --git a/netbox/templates/extras/dashboard/widgets/rssfeed.html b/netbox/templates/extras/dashboard/widgets/rssfeed.html index 293e22b7f..5de3c3105 100644 --- a/netbox/templates/extras/dashboard/widgets/rssfeed.html +++ b/netbox/templates/extras/dashboard/widgets/rssfeed.html @@ -1,13 +1,22 @@ -
- {% for entry in feed.entries %} -
-
{{ entry.title }}
-
- {{ entry.summary|safe }} +{% if not feed.bozo %} +
+ {% for entry in feed.entries %} +
+
{{ entry.title }}
+
+ {{ entry.summary|safe }} +
-
- {% empty %} -
No content found
- {% endfor %} -
- + {% empty %} +
No content found
+ {% endfor %} +
+{% else %} + {# There was an error retrieving/parsing the feed #} + + There was a problem fetching the RSS feed: + +
+Response status: {{ feed.status }}
+Error: {{ feed.bozo_exception|escape }}
+{% endif %}