We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Today, we are going to learn how to add an extra panel to the admin homepage in Wagtail. This small post shows how to a add a panel with a couple of links on the admin homepage.
We first start with creating a file called wagtail_hooks.py
in one of our apps. In my demo, I've added it to the app called base
. If you already have such a file, you just need to add the code in there.
base/wagtail_hooks.py
from wagtail.core import hooks
from django.template.loader import render_to_string
class ExternalLinksPanel:
name = 'external_links'
order = 200
def __init__(self, request):
self.request = request
self.external_links = [
('Google Analytics', 'https://analytics.google.com/'),
('Google Search Console', 'https://search.google.com/search-console'),
('View Site', '/'),
]
def render(self):
return render_to_string('wagtailadmin/home/external_links.html', {
'external_links': self.external_links,
}, request=self.request)
@hooks.register('construct_homepage_panels')
def add_org_moderation_panel(request, panels):
panels.append(ExternalLinksPanel(request))
We start with creating a class called ExternalLinksPanel
which takes a request
object in the constructor. It also implements the render
method which performs the rendering.
We then register a hook called construct_homepage_panels
which is triggered when Wagtail creates the admin homepage panel. We simply add our custom panel to the list.
To finish off, we also need to create the template which is in the render
method. Pay attention to the location where we store this template because it will be loaded from the wagtailadmin
application…
templates/wagtailadmin/home/external_links.html
<section class="object collapsible">
<h2 class="title-wrapper">External Links</h2>
<div class="object-layout">
<table class="listing listing-page">
<col />
<thead>
<tr>
<th class="title">Link</th>
</tr>
</thead>
<tbody>
{% for link in external_links %}
<tr>
<td class="title" valign="top">
➡️ <a href="{{ link.1 }}">{{ link.0 }}</a></br>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</section>
Then restart your server and you should see the panel appear on the homepage.
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.