Install django-cruds-adminlte (already in Pypi):

pip install django-cruds-adminlte

Then use it in a project, add cruds_adminlte to INSTALLED_APPS. Note that you will have to install crispy_forms and image_cropping if before the app if you want to use them:

pip install django-crispy-forms
pip install easy-thumbnails
pip install django-image-cropping
pip install djangoajax

Next step is to add the urls to your project.urls as was said above:

# django-cruds-adminlte
from cruds_adminlte.urls import crud_for_app
urlpatterns += crud_for_app('testapp')

And you can start modeling your app, migrate it and directly browse to the urls described above, that’s all.


The django-cruds-adminlte works thanks to:

  • Python 3.7+
  • Django >=2.2
  • django-crispy-forms
  • django-image-cropping and easy-thumbnails (optional if you want to crop)
  • djangoajax (for the inlines stuff)

If you want full support then install dependencies make sure to install these packages prior to installation in your environment:

pip install django-crispy-forms
pip install django-select2
pip install django-image-cropping
pip install easy-thumbnails
pip install djangoajax

Getting the code

For the latest stable version of django-cruds-adminlte use pip:

$ pip install django-cruds-adminlte

You could also retrieve the last sources from Clone the repository using git and run the installation script:

$ git clone git://
$ cd django-cruds-adminlte
$ python install

or more easily via pip:

$ pip install -e git://


Assuming that you have an already existing Django project, register cruds_adminlte in the INSTALLED_APPS section of your project’s settings:



Configure template pack and jquery for image_cropping. Note: Template also import jquery so it’s not necessary import custom IMAGE_CROPPING_JQUERY_URL:


Configure internal IPs:


Configure easy_thumbnails:

from easy_thumbnails.conf import Settings as thumbnail_settings
) + thumbnail_settings.THUMBNAIL_PROCESSORS

Configure the default time and datetime:




Datetime and time depends on USE_TZ attribute, so changes there impact in all django timezone management

URLs for the CRUD

To add CRUD for whole app, add this to

# django-cruds-adminlte
from cruds_adminlte.urls import crud_for_app
urlpatterns += crud_for_app('testapp')

This will create following urls and appropriate views (assuming there is a application named testapp with model Author:

URL name
/testapp/author/list/ testapp_author_list
/testapp/author/new/ testapp_author_create
/testapp/author/(?P<pk>d+) testapp_author_detail
/testapp/author/(?P<pk>d+)/update/ testapp_author_update
/testapp/author/(?P<pk>d+)/delete/ testapp_author_delete

It is also possible to add CRUD for one model:

from django.apps import apps
from cruds_adminlte.urls import crud_for_model
urlpatterns += crud_for_model(apps.get_model('testapp', 'Author'))


Parameters you can set in cruds_for_app method call:

  • login_required (boolean): Check if the login is required, need to activate ‘login’ and ‘logout’ urls, for example:

    url(r'^accounts/login/$', auth_views.login, name='login'),
    url(r'^logout/$', auth_views.logout, name='logout'),
  • check_perms (boolean): Check if the user has the proper permissions.

  • cruds_url (string): Put all the generated cruds in a common url, instead of ‘app_one/model/list’ and ‘app_two/model/list’ we can set it to ‘myadmin’ and then the urls will be ‘myadmin/app_one/model/list’ and ‘myadmin/app_two/model/list’.

  • modelforms: Load custom forms for the cruds of the model.

Different samples:

urlpatterns += crud_for_app('app_one', login_required=True,
                            check_perms=True, cruds_url='myadmin')
urlpatterns += crud_for_app('app_two', login_required=False,
                            check_perms=True, cruds_url='myadmin')

from testapp.forms import CustomerForm, InvoiceForm
custom_forms = {
    'add_customer': CustomerForm,
    'update_customer': CustomerForm,
    'add_invoice': InvoiceForm,
    'update_invoice': InvoiceForm,
urlpatterns += crud_for_app('app_three', login_required=True,
                            check_perms=True, cruds_url='myadmin',