diff --git a/admin_interface/templates/admin/base_site.html b/admin_interface/templates/admin/base_site.html
index a0b20bd..10efb7e 100644
--- a/admin_interface/templates/admin/base_site.html
+++ b/admin_interface/templates/admin/base_site.html
@@ -19,6 +19,7 @@ https://github.com/fabiocaccamo/django-admin-interface
{% include "admin_interface/css/list-filter-dropdown.css" %}
{% include "admin_interface/css/recent-actions.css" %}
{% include "admin_interface/css/related-modal.css" %}
+{% include "admin_interface/css/menu.css" %}
{% include "admin_interface/css/jquery.ui.tabs.css" %}
{% include "admin_interface/css/modeltranslation.css" %}
{% include "admin_interface/css/sorl-thumbnail.css" %}
@@ -70,3 +71,28 @@ https://github.com/fabiocaccamo/django-admin-interface
{% endif %}
{% if theme.env_visible_in_header %} - {% endif %}{{ block.super }}
{% endblock %}
+
+{% block nav-global %}
+{% if not is_popup %}
+{% get_admin_interface_menu as menu %}
+{% if menu %}
+
+{% endif %}
+{% endif %}
+{% endblock %}
diff --git a/admin_interface/templates/admin_interface/css/menu.css b/admin_interface/templates/admin_interface/css/menu.css
new file mode 100644
index 0000000..04b0ece
--- /dev/null
+++ b/admin_interface/templates/admin_interface/css/menu.css
@@ -0,0 +1,86 @@
+#menu {
+ flex: 1 1 100%;
+ overflow: hidden;
+ background-color: {{ theme.css_header_background_color }};
+ margin-top: 10px;
+ width: 100%;
+ }
+
+ #menu a {
+ float: left;
+ font-size: 14px;
+ color: white;
+ text-align: center;
+ padding: 14px 16px;
+ text-decoration: none;
+ background-color: {{ theme.css_module_background_color }};
+ }
+
+ #menu a:first-child {
+ border-radius: 4px 0 0 0;
+ }
+
+ #menu .dropdown {
+ float: left;
+ overflow: hidden;
+ }
+
+ #menu .dropdown:first-child {
+ border-radius: 4px 0 0 0;
+ }
+
+ #menu .dropdown:last-child {
+ border-radius: 0 4px 0 0;
+ }
+
+ #menu .dropdown .dropbtn {
+ font-size: 14px;
+ border: none;
+ outline: none;
+ color: {{ theme.css_module_text_color }};
+ padding: 14px 16px;
+ font-family: inherit;
+ margin: 0;
+ background-color: {{ theme.css_module_background_color }};
+ }
+
+ #menu a:hover, .dropdown:hover .dropbtn {
+ background-color: {{ theme.css_generic_link_hover_color }};
+ }
+
+ #menu .dropdown-content {
+ display: none;
+ position: absolute;
+ background-color: {{ theme.css_generic_link_hover_color }};
+ min-width: 160px;
+ box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+ z-index: 1;
+ }
+
+ #menu .dropdown-content a {
+ border-radius: unset;
+ float: none;
+ color: {{ theme.css_module_text_color }};
+ padding: 12px 16px;
+ text-decoration: none;
+ display: block;
+ text-align: left;
+ }
+
+ #menu .dropdown-content a:hover {
+ background-color: #ddd;
+ }
+
+ #menu .dropdown:hover .dropdown-content {
+ display: block;
+ }
+
+ .arrow-down {
+ width: 0;
+ height: 0;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+
+ border-top: 5px solid white;
+ }
+
\ No newline at end of file
diff --git a/admin_interface/templatetags/admin_interface_tags.py b/admin_interface/templatetags/admin_interface_tags.py
index 13e0c0f..3ac491c 100644
--- a/admin_interface/templatetags/admin_interface_tags.py
+++ b/admin_interface/templatetags/admin_interface_tags.py
@@ -2,11 +2,14 @@
import django
from django import template, VERSION
+from django.apps import apps
from django.conf import settings
if django.VERSION < (1, 10):
from django.core.urlresolvers import NoReverseMatch, reverse
else:
from django.urls import NoReverseMatch, reverse
+from django.contrib import admin
+from django.contrib.admin.sites import all_sites
from django.utils import translation
from admin_interface.cache import get_cached_active_theme, set_cached_active_theme
@@ -78,3 +81,14 @@ def get_admin_interface_theme(context):
@simple_tag(takes_context=False)
def get_admin_interface_version():
return __version__
+
+
+@simple_tag(takes_context=True)
+def get_admin_interface_menu(context):
+ request = context['request']
+ if request.user and request.user.is_staff:
+ current_app = request.current_app if hasattr(request, 'current_app') else 'admin' # Fallback on default admin for WSGI requests from not-admin views
+ for admin_site in all_sites:
+ if admin_site.name == current_app:
+ return admin_site.get_app_list(request)
+ return []