django's default admin interface made customizable. popup windows replaced by modals. :mage: :zap:

Overview

django-admin-interface

django-admin-interface is a modern responsive flat admin interface customizable by the admin itself.

django-admin-interface-preview

Features

  • Beautiful default django-theme
  • Themes management and customization (you can customize admin title, logo and colors)
  • Responsive
  • List filter dropdown (optional)
  • NEW Related modal (instead of the old popup window, optional)
  • NEW Environment name/marker
  • NEW Language chooser
  • Compatibility / Style optimizations for:
    • django-ckeditor
    • django-dynamic-raw-id
    • django-json-widget
    • django-modeltranslation
    • django-tabbed-admin
    • sorl-thumbnail

Installation

  • Run pip install django-admin-interface
  • Add admin_interface, flat_responsive, flat and colorfield to settings.INSTALLED_APPS before django.contrib.admin
INSTALLED_APPS = (
    #...
    'admin_interface',
    'flat_responsive', # only if django version < 2.0
    'flat', # only if django version < 1.9
    'colorfield',
    #...
    'django.contrib.admin',
    #...
)

X_FRAME_OPTIONS='SAMEORIGIN' # only if django version >= 3.0
  • Run python manage.py migrate
  • Run python manage.py collectstatic
  • Restart your application server

Upgrade

  • Run pip install django-admin-interface --upgrade
  • Run python manage.py migrate (add --fake-initial if you are upgrading from 0.1.0 version)
  • Run python manage.py collectstatic --clear
  • Restart your application server

Optional themes

This package ships with optional themes as fixtures, they can be installed using the loaddata admin command. Optional themes are activated on installation.

Django theme (default):

Run python manage.py loaddata admin_interface_theme_django.json

Bootstrap theme:

Run python manage.py loaddata admin_interface_theme_bootstrap.json

Foundation theme:

Run python manage.py loaddata admin_interface_theme_foundation.json

U.S. Web Design Standards theme:

Run python manage.py loaddata admin_interface_theme_uswds.json

Add more themes

You can add a theme you've created through the admin to this repository by sending us a PR. Here are the steps to follow to add:

  1. Export your exact theme as fixture using the dumpdata admin command: python manage.py dumpdata admin_interface.Theme --indent 4 -o admin_interface_theme_{{name}}.json --pks=N

  2. Copy the generated json file into the fixtures folder (making sure its name starts with admin_interface_theme_ to avoid clashes with fixtures that might be provided by other third party apps).

  3. Remove the "pk" from the fixture and make sure the active field is set to true (in this way a theme is automatically activated when installed).

  4. Edit the section above to document your theme.

Add theme support to third-party libraries

You can add theme support to existing third-party libraries using the following css variables:

  • --admin-interface-title-color
  • --admin-interface-logo-color
  • --admin-interface-env-color
  • --admin-interface-header-background-color:
  • --admin-interface-header-text-color
  • --admin-interface-header-link-color
  • --admin-interface-header-link_hover-color
  • --admin-interface-module-background-color
  • --admin-interface-module-text-color
  • --admin-interface-module-link-color
  • --admin-interface-module-link-hover-color
  • --admin-interface-generic-link-color
  • --admin-interface-generic-link-hover-color
  • --admin-interface-save-button-background-color
  • --admin-interface-save-button-background-hover-color
  • --admin-interface-save-button-text-color
  • --admin-interface-delete-button-background-color
  • --admin-interface-delete-button-background-hover-color
  • --admin-interface-delete-button-text-color
  • --admin-interface-related-modal-background-color
  • --admin-interface-related-modal-background-opacity

Screenshots

Admin login

django-admin-interface_login

Admin dashboard

django-admin-interface_dashboard

Admin themes management

django-admin-interface_themes_management

Admin theme customization

django-admin-interface_theme_customization

FAQ

  • I already have a custom base_site.html, how can I make it work?

You can use django-apptemplates, then add {% extends "admin_interface:admin/base_site.html" %} to your base_site.html

Testing

# create python virtual environment
virtualenv testing_django_admin_interface

# activate virtualenv
cd testing_django_admin_interface && . bin/activate

# clone repo
git clone https://github.com/fabiocaccamo/django-admin-interface.git src && cd src

# install dependencies
pip install -r requirements.txt

# run tests
tox
# or
python setup.py test
# or
python -m django test --settings "tests.settings"

License

Released under MIT License.


See also

  • django-colorfield - simple color field for models with a nice color-picker in the admin. 🎨

  • django-extra-settings - config and manage typed extra settings using just the django admin. ⚙️

  • django-maintenance-mode - shows a 503 error page when maintenance-mode is on. 🚧 🛠️

  • django-redirects - redirects with full control. ↪️

  • django-treenode - probably the best abstract model / admin for your tree based stuff. 🌳

  • python-benedict - dict subclass with keylist/keypath support, I/O shortcuts (base64, csv, json, pickle, plist, query-string, toml, xml, yaml) and many utilities. 📘

  • python-codicefiscale - encode/decode Italian fiscal codes - codifica/decodifica del Codice Fiscale. 🇮🇹 💳

  • python-fsutil - file-system utilities for lazy devs. 🧟‍♂️

Comments
  • post_migrate_handler

    post_migrate_handler

    Python version 3.8

    Django version 3.2.16

    Package version 0.22.2

    Current behavior (bug description) The current behavior of the post-migration signal (post_migrate_handler) does not take into account any routing of the databases

    from django.conf import settings
    
    
    class DatabaseAppsRouter(object):
        """
    
            arouter to control all database operations on models for different
            databases.
    
            in case an app is not set in settings.DATABASE_APPS_MAPPING, the router
            will fallback to the `default` database.
    
            Settings example:
    
            DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}
        """
    
        def db_for_read(self, model, **hints):
            """Point all read operations to the specific database"""
            if model._meta.app_label in settings.DATABASE_APPS_MAPPING:
                return settings.DATABASE_APPS_MAPPING[model._meta.app_label]
    
            return None
    
        def db_for_write(self, model, **hints):
            """Point all write operations to the specific database"""
            if model._meta.app_label in settings.DATABASE_APPS_MAPPING:
                return settings.DATABASE_APPS_MAPPING[model._meta.app_label]
    
            return None
    
        def allow_relation(self, obj1, obj2, **hints):
            """Allow any relation between apps that use the same database"""
            db1 = settings.DATABASE_APPS_MAPPING[obj1._meta.app_label]
            db2 = settings.DATABASE_APPS_MAPPING[obj2._meta.app_label]
    
            if db1 and db2:
                return db1 == db2
    
            return None
    
        def allow_migrate(self, db, app_label, model_name=None, **hints):
            """Make sure that apps only appear in the related database"""
    
            if db in settings.DATABASE_APPS_MAPPING.values():
                return settings.DATABASE_APPS_MAPPING[app_label] == db
    
            elif app_label in settings.DATABASE_APPS_MAPPING:
                return False
    
            return None
    
    
    DATABASES = {
        'default': {
            'ENGINE': 'timescale.db.backends.postgresql',
            'NAME': TIMESCALE_DB_HOST_FORMATTED['Database'],
            'USER': TIMESCALE_DB_HOST_FORMATTED['Username'],
            'PASSWORD': TIMESCALE_DB_HOST_FORMATTED['Password'],
            'HOST': TIMESCALE_DB_HOST_FORMATTED['Host'],
            'PORT': TIMESCALE_DB_PORT,
            'OPTIONS': {
                'client_encoding': 'UTF8',
                # 'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE,
            }
        },
        'collector': {
            'ENGINE': 'djongo',
            'NAME': 'Database',
            'ENFORCE_SCHEMA': True,
            'CLIENT': {
                'host': MONGO_DB_HOST
            }
        }
    }
    
    
    DATABASE_APPS_MAPPING = {
        'contenttypes': 'default',
        'auth': 'default',
        'admin': 'default',
        'django_cache': 'default',
        'sessions': 'default',
        'staticfiles': 'default',
        'admin_interface': 'default',
        'collector': 'djongo(mongodb)',
        'main': 'default',
    }
    
    DATABASE_ROUTERS = ['routers.DatabaseAppsRouter']
    

    Workaround

    def apply_theme(sender, **kwargs):
        from django.conf import settings
        from admin_interface.models import Theme
        from admin_interface.cache import del_cached_active_theme
    
        del_cached_active_theme()
        theme = Theme.get_active_theme('default')
        theme.logo = ....
        theme.favicon = ....
        theme.save()
    
    
    class MainConfig(AppConfig):
        default_auto_field = 'django.db.models.BigAutoField'
        name = 'main'
        verbose_name = 'analyser configuration'
    
        def ready(self) -> None:
            from admin_interface.models import Theme
    
            Theme.post_migrate_handler = apply_theme
            if 'admin_interface_theme' in connection.introspection.table_names():
                apply_theme(None)
    
    bug 
    opened by zN3utr4l 35
  • Tabbed changeform

    Tabbed changeform

    Related to #209

    These are purely visual changes based on a boolean field.

    Significant changes are,

    • Two new fields show_fieldsets_as_tabs & show_inlines_as_tabs and it's migration.
    • headless_* version of fieldsets and inlines templates in order to hide the header. They are exact copies except for the title line.
    • Template tag to fetch headerless_* version of fieldset and inlines when in tabbed mode
    • JS file with basic tab logic
    • Static CSS for tab buttons
    enhancement 
    opened by VaZark 26
  • Popup for related models creation fires a javascript error when

    Popup for related models creation fires a javascript error when "Related modal" is inactive

    Python version Python 3.7.6

    Django version Django 3.0.4

    Package version django-admin-interface==0.12

    Current behavior (bug description) The Popup for related models creation doesn't work when "Related modal" is inactive, due to this javascript error:

     Uncaught TypeError: Cannot read property 'replace' of undefined
        at windowname_to_id (:8000/static/admin/js/admin/RelatedObjectLookups.js:19)
        at dismissAddRelatedObjectPopup (:8000/static/admin/js/admin/RelatedObjectLookups.js:77)
        at popup_response.js:43
        at popup_response.js:52
    

    Expected behavior Since the standard Django admin is working correctly, this problem seems related to the presence of django-admin-interface.

    I did a very basic setup of a simple Django project to reproduce the error in a simplified enrvironment.

    The project and some screenshots to better explain the problem are available here:

    https://github.com/morlandi/test-admin-interface

    bug 
    opened by morlandi 20
  • Refresh translations + add CI check

    Refresh translations + add CI check

    I recreated translations last week and noticed many changes.

    Files should be regenerated so that translators can update translations. I will contribute French!

    bug 
    opened by merwok 17
  • Replace travis with github actions

    Replace travis with github actions

    Most projects have left Travis because of the management issues. It seems that tests for PRs here are not run any more. I could convert the config to github actions (example conversions from circleci: https://github.com/caravancoop/configstore/pull/47)

    enhancement 
    opened by merwok 17
  • Unreadable text in autocomplete multi-selects

    Unreadable text in autocomplete multi-selects

    Python version 3.8

    Django version 3.0.6

    Package version 0.12.2

    Current behavior (bug description) In a multi-select field using autocomplete (django admin feature), selected options are not readable. Django’s autocomplete.css sets a white font color, django-admin-interface inline CSS defines white background color.

    Expected behavior Text should be readable :slightly_smiling_face: I am not sure if the background or text color should change, though; should probably match the behaviour of custom selects.

    A quick workaround:

    .select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
      color: inherit;
    
    bug 
    opened by merwok 17
  • Cache admin settings

    Cache admin settings

    Each call to Theme.get_active_theme makes multiple database calls. Unfortunately, that's called in the get_admin_interface_theme template tag, which appears multiple times on each admin page render.

    We should cache these calls at least per request to speed up performance.

    enhancement 
    opened by cmc333333 17
  • Left/right scrolling broken with django-import-export

    Left/right scrolling broken with django-import-export

    I'm not sure which repo to open this issue on, but when using django-import-export, after importing it takes you to a big table that shows the before & after. With this theme enabled, there is no ability to scroll left and right to see those changes.

    Issue on the other side, just in case: https://github.com/django-import-export/django-import-export/issues/1476

    enhancement 
    opened by yatahaze 16
  • migrate fails at

    migrate fails at "change_related_modal_background_opacity_type"

    Hi there. Thanks for the great interface. I'm trying to migrate from a function setup with Python 3.6, Django 2.1.5, and admin-interface 0.9.1 . When I run migrate on my development computer I end up with the following traceback. I'm happy to help debug but the process of debugging if I can.

    ` Applying admin_interface.0008_change_related_modal_background_opacity_type...Traceback (most recent call last): File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) psycopg2.OperationalError: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration state = migration.apply(state, schema_editor) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/migration.py", line 124, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/operations/fields.py", line 216, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 523, in alter_field old_db_params, new_db_params, strict) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/postgresql/schema.py", line 122, in _alter_field new_db_params, strict, File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 663, in _alter_field params, File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 133, in execute cursor.execute(sql, params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 100, in execute return super().execute(sql, params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers return executor(sql, params, many, context) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/utils.py", line 89, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) django.db.utils.OperationalError: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect self.connection = self.get_new_connection(conn_params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection connection = Database.connect(**conn_params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/psycopg2/init.py", line 130, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: FATAL: the database system is in recovery mode

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "manage.py", line 30, in execute_from_command_line(sys.argv) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/init.py", line 381, in execute_from_command_line utility.execute() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/init.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv self.execute(*args, **cmd_options) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute output = self.handle(*args, **options) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped res = handle_func(*args, **kwargs) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 203, in handle fake_initial=fake_initial, File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/executor.py", line 117, in migrate state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration state = migration.apply(state, schema_editor) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 108, in exit self.atomic.exit(exc_type, exc_value, traceback) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/transaction.py", line 256, in exit connection.set_autocommit(True) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 394, in set_autocommit self.ensure_connection() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/utils.py", line 89, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect self.connection = self.get_new_connection(conn_params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection connection = Database.connect(**conn_params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/psycopg2/init.py", line 130, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: FATAL: the database system is in recovery `mode``

    opened by acegallagher 16
  • CSS as FileField in `Theme` model

    CSS as FileField in `Theme` model

    Hello,

    I have seen that the Theme model allow to "inject" raw css through its css attribute. However it is a TextField and it is not so easy to use in practice (for instance we need to inline the css code in the json fixture). I think it could be great to either turn this field into a FileField or to add a new FileField attribute like css_file. Of course I can help through a PR :)

    enhancement wontfix 
    opened by asiffer 15
  • Show active filters at the top of the sidebar with clear button

    Show active filters at the top of the sidebar with clear button

    On a list page with many filters shown and the dropdown option active, admin users have a hard time finding out which filters are currently active, in order to remove one for example if the current selection has no results. They would have to go through the list and determine if the value visible is the default or not, so they end up clearing all filters (it’s the only action displayed) and re-building their selection.

    #174 improves the visibility and #175 fixes a usability issue. This proposes a new theme option to also display current filters at the top of the sidebar, wich a link to remove each filter: ( x Age: 9+ ) ( x Group: 10-15 ) ( x Clear all filters ) (parens to represent a chip widget)

    enhancement 
    opened by merwok 14
  • Used slugify  template tag for tabs  not working with   non-ASCII alphanumeric characters

    Used slugify template tag for tabs not working with non-ASCII alphanumeric characters

    Hello, Thank you for your amazing django package

    When used slugify template tag for tabs not working with non-ASCII alphanumeric characters

    https://github.com/fabiocaccamo/django-admin-interface/blob/8d82d80c19f76f409f75456bf974966f6d8295a2/admin_interface/templates/admin/change_form.html#L21

    instated you can used forloop counter

    used tab with loop of counter for fieldset

    <button type="button" id="tablink-tab{{  forloop.counter   }}" class="tabbed-changeform-tablink {{ forloop.counter0|default:'active' }}" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'tab{{forloop.counter }}')">
                        {{ tab_name|capfirst }}
                    </button>
    

    Used** tab0 for fieldsets without tabs

    used itab with loop counter for inlines formset

    <button type="button" id="tablink-itab{{ forloop.counter }}" class="tabbed-changeform-tablink" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'itab{{ forloop.counter }}')">
                        {{ tab_name|capfirst }}
                    </button>
    

    this is full patch code:

      <div id="tabbed-changeform-tabs" class="tabbed-changeform-tabs">
    
                {% if show_fieldsets_as_tabs %}
                    {% for fieldset in adminform %}
    
                    {% with fieldset.name|default_if_none:opts.verbose_name as tab_name %}
                    <button type="button" id="tablink-tab{{  forloop.counter   }}" class="tabbed-changeform-tablink {{ forloop.counter0|default:'active' }}" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'tab{{forloop.counter }}')">
                        {{ tab_name|capfirst }}
                    </button>
                    {% endwith %}
    
                    {% endfor %}
                {% else %}
                    {% with opts.verbose_name as tab_name %}
                    <button type="button" id="tablink-tab0" class="tabbed-changeform-tablink active" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'tab0')">
                        {{ tab_name|capfirst }}
                    </button>
                    {% endwith %}
                {% endif %}
    
                {% if show_inlines_as_tabs %}
                    {% for inline_admin_formset in inline_admin_formsets %}
                    {% with inline_admin_formset.opts.verbose_name_plural as tab_name %}
                    <button type="button" id="tablink-itab{{ forloop.counter }}" class="tabbed-changeform-tablink" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'itab{{ forloop.counter }}')">
                        {{ tab_name|capfirst }}
                    </button>
                    {% endwith %}
                    {% endfor %}
                {% endif %}
    
                <span class="tabbed-changeform-tabs-remaining-space"></span>
    
            </div>
    
            {% if show_fieldsets_as_tabs %}
                {% for fieldset in adminform %}
                {% with fieldset.name|default_if_none:opts.verbose_name as tab_name %}
                <div id="tabcontent-tab{{ forloop.counter }}" class="tabbed-changeform-tabcontent {{ forloop.counter0|default:'active' }}">
                    {% include "admin/includes/headerless_fieldset.html" %}
                </div>
                {% endwith %}
                {% endfor %}
            {% else %}
                {% with opts.verbose_name as tab_name %}
                <div id="tabcontent-tab0" class="tabbed-changeform-tabcontent active">
                {% for fieldset in adminform %}
                    {% include "admin/includes/fieldset.html" %}
                {% endfor %}
                </div>
                {% endwith %}
            {% endif %}
    
            {% for inline_admin_formset in inline_admin_formsets  %}
            {% with inline_admin_formset.opts.verbose_name_plural as tab_name %}
            <div id="tabcontent-itab{{ forloop.counter }}" class="tabbed-changeform-tabcontent">
                {% get_admin_interface_inline_template inline_admin_formset.opts.template as inline_template %}
                {% include inline_template %}
            </div>
            {% endwith %}
            {% endfor %}
    
    bug 
    opened by EngFarisAlsmawi 2
  • Dashboard feature

    Dashboard feature

    When building django admin apps, it is usually nice to have a custom dashboard to display extra data.

    Take a look a django-unfold package and see how that is achieved, it'll be nice to have something similar.

    enhancement 
    opened by Ladet02 3
  • Initial changes for Dark mode :

    Initial changes for Dark mode :

    Related to #129

    This PR lays the ground work for using a proper dark mode. This PR is meant to validate and allow two separate themes at the same time

    • [X] Adds a new param active_dark to designate a theme to be used for dark mode
    • [X] Splits outs Styles in base_site.html into separate file that is included
    • [X] Updates the new ThemeQueryset, model function and signals to handle for use_dark
    • [X] Add active dark checkbox for admin listview
    • [X] Tests

    TODO in a different PR :

    • Override Django's css variables with colors from the theme
    enhancement 
    opened by VaZark 6
  • Add new `css_generic_link_active_color` field to use on active tab (tabbed changeform).

    Add new `css_generic_link_active_color` field to use on active tab (tabbed changeform).

    Yes, adding a css_generic_link_active_color would solve any doubt and would also be available for possible other future cases.

    Originally posted by @fabiocaccamo in https://github.com/fabiocaccamo/django-admin-interface/issues/231#issuecomment-1352912993

    enhancement 
    opened by fabiocaccamo 0
  • Custom Admin Page

    Custom Admin Page

    Hello !! I've recently discovered this project in my quest to reuse the admin page as much as possible for a minimal backoffice. I love that ability to theme and all the little features like dropdown for filters that make a big difference to UX.

    Requested feature Do you have any plans on adding support for a custom Admin Page?

    Feature context Currently, I am hitting a wall with the reusability of the admin. I'd like to make custom pages with a custom queryset in order to have custom pages for KPIs and charts, internal forms and tiny little backoffice features.

    A quick look at the code shows me that it needs to be an admin_view or tied to BaseModelAdmin. I'm currently working on trying to replicate it but it's a wip and I'm pretty lost haha

    What it brings to project This would be a major differentiator against the standard admin. Since, django admin comes loaded with default widgets and permissons, there is far less logic to be written if we need only a few custom pages for a backoffice.

    Other solutions : I've taken a look at django-admin-views but I'm not been able to get it working so far. (I've raised a bug report at the moment)

    enhancement 
    opened by VaZark 3
  • Sticky table header and columns (action checkbox column and first field column).

    Sticky table header and columns (action checkbox column and first field column).

    It would be very useful having the possibility to set sticky table columns in the changelist (action checkbox column if actions are enabled + list_display_links columns), and also in the tabular inlines table.

    This feature would improve tables UX, especially when there is horizontal scroll.

    NOTE: should test also with RTL languages.

    enhancement 
    opened by fabiocaccamo 5
Releases(0.24.2)
  • 0.24.2(Dec 19, 2022)

  • 0.24.1(Dec 14, 2022)

  • 0.24.0(Dec 11, 2022)

    • Drop Python < 3.8 and Django < 2.2 versions support. (by @merwok in #220)
    • Replace str.format with f-strings.
    • Remove post_migrate signal handler and multi db test.
    • Add german translation. (by @derzinn in #222)
    • Include date hierarchy in quick removal links (by @merwok in #218)
    • Fix broken tabbed inline name. (by @VaZark in #221)
    • Minor cleanups. (by @merwok in #225)
    • Bump actions and requirements.
    • [css] Fix inlines vertical alignement. (by @VaZark in #201)
    • [css] Fix tabbed changeform tabs text color on focus. (by @VaZark in #223)
    • [CI] Add Farsi language to tests.settings.LANGUAGES. (by @merwok)
    • [CI] Update pre-commit config.
    • [CI] Automate package build and publish on PyPI.
    Source code(tar.gz)
    Source code(zip)
  • 0.23.0(Nov 30, 2022)

    • Add Python 3.11 support.
    • Add tabbed changeform support. (by @VaZark in #211)
    • Fix #208 / Do not assume active DB when not specified. (by @VaZark in #210)
    • Update translations.
    • Bump actions and requirements.
    • [css] Adjust list filter dropdown vertical margins.
    • [css] Improve nav filter style. #214
    • [css] Improve language chooser style.
    • [css] Reduce secondary scrollbars size.
    • [CI] Update dependabot.yml
    • [CI] Add pre-commit-autoupdate.yml workflow.
    • [CI] Update pre-commit hooks.
    Source code(tar.gz)
    Source code(zip)
  • 0.22.2(Nov 18, 2022)

    • [CI] Add django 4.1 to tests.
    • [CI] Add pre-commit with black, isort and flake8.
    • Respect using in signals. #199 (by @VaZark in #200)
    • Remove translations line numbers to avoid lint step failures.
    Source code(tar.gz)
    Source code(zip)
  • 0.22.1(Oct 13, 2022)

    • Fix KeyError raised by django-rangefilter.
    • [css] Add django-rangefilter style optimizations.
    • [css] Fix list-filter dropdown vertical margins.
    • [css] Fix calendar prev/next arrows style.
    Source code(tar.gz)
    Source code(zip)
  • 0.22.0(Oct 12, 2022)

    • Add CI checks for migrations and translations. #184 (by @merwok in #186)
    • Add option for list filter quick remove. #181 (by @merwok in #183)
    • [css] Fix left/right scrolling broken with django-import-export. #165
    • [html] Fix duplicated welcome message. #185
    Source code(tar.gz)
    Source code(zip)
  • 0.21.0(Oct 6, 2022)

    • Add language chooser control option (default select, minimal select). #136
    • Add option to make active list filters more visible. #174 (by @merwok in #178)
    • Add support for collapsible fieldsets that start expanded. #173 (by @merwok in #177)
    • [js] Fix modal window not closing on save with django >= 4.0. #169
    • [css] Move language-chooser style to its own CSS file.
    • [css] Fix sticky list filter scrolling. #175
    • [css] Fix paginator missing border-top on mobile.
    Source code(tar.gz)
    Source code(zip)
  • 0.20.0(Aug 25, 2022)

  • 0.19.2(Aug 4, 2022)

  • 0.19.1(May 14, 2022)

  • 0.19.0(May 14, 2022)

  • 0.18.7(Feb 24, 2022)

  • 0.18.6(Feb 4, 2022)

  • 0.18.5(Jan 21, 2022)

  • 0.18.4(Jan 5, 2022)

    • Added official django 4.0 support.
    • Added link to admin home page on logo and title. #147
    • Fixed collapsed inlines rounded bottom borders.
    • Fixed missing comma in tests settings MIDDLEWARE_CLASSES. #145
    Source code(tar.gz)
    Source code(zip)
  • 0.18.3(Dec 7, 2021)

    • Added official python 3.10 support.
    • Replaced travis with GitHub action workflow. #142
    • Fixed check_installed_apps checks.
    • Fixed django default appconfig deprecation warning. #141
    Source code(tar.gz)
    Source code(zip)
  • 0.18.2(Nov 25, 2021)

  • 0.18.1(Jan 5, 2022)

  • 0.18.0(Nov 24, 2021)

  • 0.17.3(Oct 12, 2021)

  • 0.17.2(Oct 8, 2021)

  • 0.17.1(Sep 24, 2021)

    • Fixed TemplateDoesNotExist error on django==4.0.a1 removing checking condition for colorfield package. #134
    • Fixed favicon fetching incompatible with django-storages S3. #128
    Source code(tar.gz)
    Source code(zip)
  • 0.17.0(Sep 16, 2021)

  • 0.16.4(Sep 16, 2021)

    • Fixed 0020_module_selected_colors migration for multiple dbs. #132
    • Fixed sticky pagination width and border-bottom.
    • Fixed inlines vertical overlow.
    • Improved header elements vertical alignment.
    Source code(tar.gz)
    Source code(zip)
  • 0.16.3(Apr 26, 2021)

  • 0.16.2(Apr 23, 2021)

    • Added python 3.9 and django 3.2 to CI.
    • Added FileExtensionValidator to logo and favicon fields. #112
    • Fixed models.W042 warning on django 3.2.
    • Fixed header min-height.
    • Fixed selects min-width.
    • Fixed changelist search, actions and submit button horizontal margins.
    • Fixed related widget wrapper margin/padding with normal select and in inlines.
    • Fixed tabular inlines horizontal scroll.
    Source code(tar.gz)
    Source code(zip)
  • 0.16.1(Apr 7, 2021)

    • Fixed style of "Delete" and "Save" buttons in the delete confirmation page. #123
    • Overridden dark-mode css variables introduced in django 3.2. #124
    Source code(tar.gz)
    Source code(zip)
  • 0.16.0(Mar 30, 2021)

    • Added customizable colors for selected apps and models in dashboard. #122
    • Added responsive_rtl.css stylesheet. #98
    • Updated vazir-font version to 27.2.2. #98
    Source code(tar.gz)
    Source code(zip)
Owner
Fabio Caccamo
Python/Django, JavaScript/Vue-JS, Node/Gulp/Sass, Objective-C
Fabio Caccamo
aiohttp admin is generator for admin interface based on aiohttp

aiohttp admin is generator for admin interface based on aiohttp

Mykhailo Havelia 17 Nov 16, 2022
Jet Bridge (Universal) for Jet Admin – API-based Admin Panel Framework for your application

Jet Bridge for Jet Admin – Admin panel framework for your application Description About Jet Admin: https://about.jetadmin.io Live Demo: https://app.je

Jet Admin 1.3k Dec 27, 2022
Modern responsive template for the Django admin interface with improved functionality. We are proud to announce completely new Jet. Please check out Live Demo

Django JET Modern template for Django admin interface with improved functionality Attention! NEW JET We are proud to announce completely new Jet. Plea

Geex Arts 3.4k Dec 29, 2022
A jazzy skin for the Django Admin-Interface (official repository).

Django Grappelli A jazzy skin for the Django admin interface. Grappelli is a grid-based alternative/extension to the Django administration interface.

Patrick Kranzlmueller 3.4k Dec 31, 2022
Modern theme for Django admin interface

Django Suit Modern theme for Django admin interface. Django Suit is alternative theme/skin/extension for Django administration interface. Project home

Kaspars Sprogis 2.2k Dec 29, 2022
A flat theme for Django admin interface. Modern, fresh, simple.

Django Flat Theme django-flat-theme is included as part of Django from version 1.9! ?? Please use this app if your project is powered by an older Djan

elky 416 Sep 22, 2022
📱 An extension for Django admin that makes interface mobile-friendly. Merged into Django 2.0

Django Flat Responsive django-flat-responsive is included as part of Django from version 2.0! ?? Use this app if your project is powered by an older D

elky 248 Sep 2, 2022
A jazzy skin for the Django Admin-Interface (official repository).

Django Grappelli A jazzy skin for the Django admin interface. Grappelli is a grid-based alternative/extension to the Django administration interface.

Patrick Kranzlmueller 3.4k Dec 31, 2022
Modern theme for Django admin interface

Django Suit Modern theme for Django admin interface. Django Suit is alternative theme/skin/extension for Django administration interface. Project home

Kaspars Sprogis 2.2k Dec 29, 2022
Disable dark mode in Django admin user interface in Django 3.2.x.

Django Non Dark Admin Disable or enable dark mode user interface in Django admin panel (Django==3.2). Installation For install this app run in termina

Artem Galichkin 6 Nov 23, 2022
Drop-in replacement of Django admin comes with lots of goodies, fully extensible with plugin support, pretty UI based on Twitter Bootstrap.

Xadmin Drop-in replacement of Django admin comes with lots of goodies, fully extensible with plugin support, pretty UI based on Twitter Bootstrap. Liv

差沙 4.7k Dec 31, 2022
Real-time monitor and web admin for Celery distributed task queue

Flower Flower is a web based tool for monitoring and administrating Celery clusters. Features Real-time monitoring using Celery Events Task progress a

Mher Movsisyan 5.5k Dec 28, 2022
A Django admin theme using Twitter Bootstrap. It doesn't need any kind of modification on your side, just add it to the installed apps.

django-admin-bootstrapped A Django admin theme using Bootstrap. It doesn't need any kind of modification on your side, just add it to the installed ap

null 1.6k Dec 28, 2022
Extendable, adaptable rewrite of django.contrib.admin

django-admin2 One of the most useful parts of django.contrib.admin is the ability to configure various views that touch and alter data. django-admin2

Jazzband 1.2k Dec 29, 2022
FastAPI Admin Dashboard based on FastAPI and Tortoise ORM.

FastAPI ADMIN 中文文档 Introduction FastAPI-Admin is a admin dashboard based on fastapi and tortoise-orm. FastAPI-Admin provide crud feature out-of-the-bo

long2ice 1.6k Jan 2, 2023
spider-admin-pro

Spider Admin Pro Github: https://github.com/mouday/spider-admin-pro Gitee: https://gitee.com/mouday/spider-admin-pro Pypi: https://pypi.org/

mouday 289 Jan 6, 2023
Django application and library for importing and exporting data with admin integration.

django-import-export django-import-export is a Django application and library for importing and exporting data with included admin integration. Featur

null 2.6k Jan 7, 2023
:honey_pot: A fake Django admin login screen page.

django-admin-honeypot django-admin-honeypot is a fake Django admin login screen to log and notify admins of attempted unauthorized access. This app wa

Derek Payton 907 Dec 31, 2022
"Log in as user" for the Django admin.

django-loginas About "Login as user" for the Django admin. loginas supports Python 3 only, as of version 0.4. If you're on 2, use 0.3.6. Installing dj

Stavros Korokithakis 326 Dec 3, 2022