Compare commits

..

34 Commits

Author SHA1 Message Date
Fabio Caccamo d5c14ef3f4 Updated CHANGELOG and version. 2019-09-27 12:08:25 +02:00
Fabio Caccamo 93dfb07af9 Fixed select2 background color. 2019-09-27 11:59:29 +02:00
Fabio Caccamo 8e734864c2 Merge pull request #69 from lorenzomorandini/select2-theme-color
Autocomplete selected color:
2019-09-27 09:29:31 +02:00
Lorenzo Morandini d1cb3c11aa Autocomplete selected color:
set select2 selected color based on css_header_background_color
2019-09-25 15:00:16 +02:00
Fabio Caccamo 82923f9e98 Optimized language chooser template tag. 2019-09-05 10:15:29 +02:00
Fabio Caccamo 235d51ed9a Updated CHANGELOG. [ci skip] 2019-09-04 11:25:21 +02:00
Fabio Caccamo 1baebf9d62 Added language chooser display option. 2019-09-04 11:24:02 +02:00
Fabio Caccamo 56cdbe5d2f Updated README and CHANGELOG. [ci skip] 2019-09-03 18:58:17 +02:00
Fabio Caccamo 06de101ded Added language chooser. 2019-09-03 18:46:31 +02:00
Fabio Caccamo 59ab83538f Removed FUNDING.yml [ci skip] 2019-07-23 18:24:50 +02:00
Fabio Caccamo b04c17a4fd Updated FUNDING.yml [ci skip] 2019-07-23 18:22:47 +02:00
Fabio Caccamo 5b0490b352 Updated FUNDING.yml [ci skip] 2019-07-23 18:19:27 +02:00
Fabio Caccamo 783464c065 Removed python 3.4 from travis. 2019-07-03 15:49:31 +02:00
Fabio Caccamo 6b3f59788b Updated .travis.yml 2019-07-03 15:18:14 +02:00
Fabio Caccamo 45ab7066cc Merge commit 'bb83f74fb4524b708e3f10f4a0b669b4e80fd70a' 2019-07-03 14:32:04 +02:00
Fabio Caccamo df013b9ba3 Removed README.rst 2019-07-03 14:31:57 +02:00
Fabio Caccamo bb83f74fb4 Create FUNDING.yml 2019-06-03 11:15:23 +02:00
Fabio Caccamo da044864d1 Added Codacy badge to README. [ci skip] 2019-05-20 10:44:31 +02:00
Fabio Caccamo db7c12fdb4 Added CHANGELOG and updated version. [ci skip] 2019-05-09 11:26:03 +02:00
Fabio Caccamo 5b0a5e4c46 Merge pull request #62 from pooyamb/master
Fix #52: Broken migration on postgres/windows
2019-05-09 10:41:27 +02:00
Pouya Mobasher Behrouz 0f1dde545e Fix #52: Broken migration on postgres/windows 2019-05-07 18:44:00 +04:30
Fabio Caccamo b45e357418 Updated .travis 2019-04-29 18:44:29 +02:00
Fabio Caccamo fa6c79c367 Updated .travis 2019-04-29 18:37:34 +02:00
Fabio Caccamo 760609cafd Updated .travis 2019-04-29 18:27:26 +02:00
Fabio Caccamo cb3443aa4c Added django 2.2 to tox and travis and updated README. 2019-04-29 17:51:51 +02:00
Fabio Caccamo 9384c6db79 Updated version. 2019-04-29 17:36:47 +02:00
Fabio Caccamo 1a800d7d6a Fixed admin duplicated count query. 2019-04-29 17:36:36 +02:00
Fabio Caccamo 352701ae7d Added admin theme caching to remove duplicated queries. Fixed #19 2019-04-29 17:35:24 +02:00
Fabio Caccamo b4d0b4c985 Added django-dynamic-raw-id support - #61 2019-04-29 16:38:28 +02:00
Fabio Caccamo 26e67dab66 Updated app title italian localization. 2019-04-29 16:37:56 +02:00
Fabio Caccamo e604dcdffa Updated version [ci skip] 2019-03-28 12:15:30 +01:00
Fabio Caccamo 9b56343a81 Added idempotent deploy support. 2019-03-28 12:08:17 +01:00
Fabio Caccamo aef2d56fba Updated version. 2019-03-22 11:41:40 +01:00
Fabio Caccamo cb7a358c6c Fixed raw-id-field whith django-admin-interface #58 2019-03-22 11:41:31 +01:00
26 changed files with 634 additions and 367 deletions
+54 -47
View File
@@ -1,6 +1,7 @@
sudo: required
language: python language: python
cache: pip
python: 3.5 python: 3.5
cache: pip
env: env:
- TOX_ENV=py27-dj17-sqlite - TOX_ENV=py27-dj17-sqlite
- TOX_ENV=py27-dj17-postgres - TOX_ENV=py27-dj17-postgres
@@ -12,18 +13,18 @@ env:
- TOX_ENV=py27-dj110-postgres - TOX_ENV=py27-dj110-postgres
- TOX_ENV=py27-dj111-sqlite - TOX_ENV=py27-dj111-sqlite
- TOX_ENV=py27-dj111-postgres - TOX_ENV=py27-dj111-postgres
- TOX_ENV=py34-dj17-sqlite # - TOX_ENV=py34-dj17-sqlite
- TOX_ENV=py34-dj17-postgres # - TOX_ENV=py34-dj17-postgres
- TOX_ENV=py34-dj18-sqlite # - TOX_ENV=py34-dj18-sqlite
- TOX_ENV=py34-dj18-postgres # - TOX_ENV=py34-dj18-postgres
- TOX_ENV=py34-dj19-sqlite # - TOX_ENV=py34-dj19-sqlite
- TOX_ENV=py34-dj19-postgres # - TOX_ENV=py34-dj19-postgres
- TOX_ENV=py34-dj110-sqlite # - TOX_ENV=py34-dj110-sqlite
- TOX_ENV=py34-dj110-postgres # - TOX_ENV=py34-dj110-postgres
- TOX_ENV=py34-dj111-sqlite # - TOX_ENV=py34-dj111-sqlite
- TOX_ENV=py34-dj111-postgres # - TOX_ENV=py34-dj111-postgres
- TOX_ENV=py34-dj20-sqlite # - TOX_ENV=py34-dj20-sqlite
- TOX_ENV=py34-dj20-postgres # - TOX_ENV=py34-dj20-postgres
- TOX_ENV=py35-dj18-sqlite - TOX_ENV=py35-dj18-sqlite
- TOX_ENV=py35-dj18-postgres - TOX_ENV=py35-dj18-postgres
- TOX_ENV=py35-dj19-sqlite - TOX_ENV=py35-dj19-sqlite
@@ -36,52 +37,59 @@ env:
- TOX_ENV=py35-dj20-postgres - TOX_ENV=py35-dj20-postgres
- TOX_ENV=py35-dj21-sqlite - TOX_ENV=py35-dj21-sqlite
- TOX_ENV=py35-dj21-postgres - TOX_ENV=py35-dj21-postgres
# - TOX_ENV=py35-dj22-sqlite
- TOX_ENV=py35-dj22-postgres
matrix: matrix:
include: include:
- python: "3.6" - python: "3.6"
env: env: TOX_ENV=py36-dj111-sqlite
- TOX_ENV=py36-dj111-sqlite
- TOX_ENV=py36-dj111-postgres
- python: "3.6" - python: "3.6"
env: env: TOX_ENV=py36-dj111-postgres
- TOX_ENV=py36-dj20-sqlite
- TOX_ENV=py36-dj20-postgres
- python: "3.6" - python: "3.6"
env: env: TOX_ENV=py36-dj20-sqlite
- TOX_ENV=py36-dj21-sqlite
- TOX_ENV=py36-dj21-postgres
- python: "3.6" - python: "3.6"
env: env: TOX_ENV=py36-dj20-postgres
- TOX_ENV=py36-djmaster-sqlite - python: "3.6"
- TOX_ENV=py36-djmaster-postgres env: TOX_ENV=py36-dj21-sqlite
- python: "3.6"
env: TOX_ENV=py36-dj21-postgres
- python: "3.6"
env: TOX_ENV=py36-dj22-sqlite
- python: "3.6"
env: TOX_ENV=py36-dj22-postgres
- python: "3.6"
env: TOX_ENV=py36-djmaster-sqlite
- python: "3.6"
env: TOX_ENV=py36-djmaster-postgres
- python: "3.7" - python: "3.7"
env:
- TOX_ENV=py37-dj20-sqlite
- TOX_ENV=py37-dj20-postgres
dist: xenial dist: xenial
language: python env: TOX_ENV=py37-dj20-sqlite
sudo: required
- python: "3.7" - python: "3.7"
env:
- TOX_ENV=py37-dj21-sqlite
- TOX_ENV=py37-dj21-postgres
dist: xenial dist: xenial
language: python env: TOX_ENV=py37-dj20-postgres
sudo: required
- python: "3.7" - python: "3.7"
env:
- TOX_ENV=py37-djmaster-sqlite
- TOX_ENV=py37-djmaster-postgres
dist: xenial dist: xenial
language: python env: TOX_ENV=py37-dj21-sqlite
sudo: required - python: "3.7"
dist: xenial
env: TOX_ENV=py37-dj21-postgres
- python: "3.7"
dist: xenial
env: TOX_ENV=py37-dj22-sqlite
- python: "3.7"
dist: xenial
env: TOX_ENV=py37-dj22-postgres
- python: "3.7"
dist: xenial
env: TOX_ENV=py37-djmaster-sqlite
- python: "3.7"
dist: xenial
env: TOX_ENV=py37-djmaster-postgres
allow_failures: allow_failures:
- env: - env: TOX_ENV=py36-djmaster-sqlite
- TOX_ENV=py36-djmaster-sqlite - env: TOX_ENV=py36-djmaster-postgres
- TOX_ENV=py36-djmaster-postgres - env: TOX_ENV=py37-djmaster-sqlite
- env: - env: TOX_ENV=py37-djmaster-postgres
- TOX_ENV=py37-djmaster-sqlite
- TOX_ENV=py37-djmaster-postgres
install: install:
- pip install tox - pip install tox
services: services:
@@ -90,4 +98,3 @@ before_script:
- psql -c 'create database admin_interface;' -U postgres - psql -c 'create database admin_interface;' -U postgres
script: script:
- tox -e $TOX_ENV - tox -e $TOX_ENV
sudo: false
+98
View File
@@ -0,0 +1,98 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.11.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.11.2) - 2019-09-27
- Fixed select2 background color.
## [0.11.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.11.1) - 2019-09-04
- Added language chooser display option.
## [0.11.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.11.0) - 2019-09-03
- Added language chooser.
## [0.10.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.10.5) - 2019-05-09
- Fixed broken migration on postgres/windows. #52
## [0.10.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.10.4) - 2019-03-29
- Added django 2.2 to tox and travis.
- Fixed admin duplicated count query.
- Added admin theme caching to remove duplicated queries. #19
- Added django-dynamic-raw-id support. #61
- Updated app title italian localization.
## [0.10.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.10.3) - 2019-03-28
- Fixed idempotent deploy support. #40
## [0.10.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.10.2) - 2019-03-22
- Fixed raw-id-field whith django-admin-interface. #58
## [0.10.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.10.1) - 2019-03-20
- Updated french localization.
## [0.10.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.10.0) - 2019-02-21
- Updated messages.
- Added related modal close button. #45
- Updated fields verbose names.
- Added environment options. #56
## [0.9.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.9.3) - 2019-02-06
- Enabled travis pip cache.
- Splitted tests to multiple files.
- Added env badge to favicon.
## [0.9.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.9.2) - 2019-01-11
- Fixed cancel button does not work. #53
- Fixed IntegrityError on postgres
## [0.9.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.9.1) - 2019-01-11
- Fixed missing migration. #51
## [0.9.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.9.0) - 2018-11-13
- Added French localization.
- Added Italian localization.
- Added Spanish localization.
- Added internationalization support.
## [0.8.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.8.2) - 2018-10-24
## [0.8.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.8.1) - 2018-10-11
## [0.8.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.8.0) - 2018-08-31
## [0.7.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.7.0) - 2018-02-06
## [0.6.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.6.3) - 2018-02-05
## [0.6.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.6.2) - 2018-02-01
## [0.6.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.6.1) - 2018-01-31
## [0.6.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.6.0) - 2017-11-23
## [0.5.9](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.9) - 2017-10-04
## [0.5.8](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.8) - 2017-09-29
## [0.5.7](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.7) - 2017-09-29
## [0.5.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.6) - 2017-09-29
## [0.5.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.5) - 2017-09-27
## [0.5.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.4) - 2017-09-27
## [0.5.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.3) - 2017-08-24
## [0.5.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.2) - 2017-07-13
## [0.5.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.1) - 2017-06-13
## [0.5.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.5.0) - 2017-06-09
## [0.4.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.4.6) - 2017-05-24
## [0.4.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.4.5) - 2017-05-19
## [0.4.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.4.4) - 2017-05-18
## [0.4.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.4.3) - 2017-05-16
## [0.4.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.4.2) - 2017-05-11
## [0.4.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.4.1) - 2017-05-04
## [0.4.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.4.0) - 2017-04-14
## [0.3.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.3.2) - 2017-03-29
## [0.3.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.3.1) - 2017-03-29
## [0.3.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.3.0) - 2017-02-09
## [0.2.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.2.1) - 2016-11-08
## [0.2.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.2.0) - 2016-09-10
## [0.1.9](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.9) - 2016-09-04
## [0.1.8](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.8) - 2016-08-05
## [0.1.7](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.7) - 2016-06-29
## [0.1.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.6) - 2016-04-13
## [0.1.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.5) - 2016-02-24
## [0.1.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.4) - 2016-02-15
## [0.1.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.3) - 2015-12-03
## [0.1.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.2) - 2015-11-25
## [0.1.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.1.1) - 2015-11-13
## [0.0.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.0.1) - 2015-11-13
+5 -3
View File
@@ -1,6 +1,6 @@
[![Build Status](https://travis-ci.org/fabiocaccamo/django-admin-interface.svg?branch=master)](https://travis-ci.org/fabiocaccamo/django-admin-interface) [![Build Status](https://travis-ci.org/fabiocaccamo/django-admin-interface.svg?branch=master)](https://travis-ci.org/fabiocaccamo/django-admin-interface)
[![codecov](https://codecov.io/gh/fabiocaccamo/django-admin-interface/branch/master/graph/badge.svg)](https://codecov.io/gh/fabiocaccamo/django-admin-interface) [![codecov](https://codecov.io/gh/fabiocaccamo/django-admin-interface/branch/master/graph/badge.svg)](https://codecov.io/gh/fabiocaccamo/django-admin-interface)
[![Code Health](https://landscape.io/github/fabiocaccamo/django-admin-interface/master/landscape.svg?style=flat)](https://landscape.io/github/fabiocaccamo/django-admin-interface/master) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/21cb657283c04e70b56fb935277a1ad1)](https://www.codacy.com/app/fabiocaccamo/django-admin-interface)
[![PyPI version](https://badge.fury.io/py/django-admin-interface.svg)](https://badge.fury.io/py/django-admin-interface) [![PyPI version](https://badge.fury.io/py/django-admin-interface.svg)](https://badge.fury.io/py/django-admin-interface)
[![PyPI downloads](https://img.shields.io/pypi/dm/django-admin-interface.svg)](https://img.shields.io/pypi/dm/django-admin-interface.svg) [![PyPI downloads](https://img.shields.io/pypi/dm/django-admin-interface.svg)](https://img.shields.io/pypi/dm/django-admin-interface.svg)
[![Py versions](https://img.shields.io/pypi/pyversions/django-admin-interface.svg)](https://img.shields.io/pypi/pyversions/django-admin-interface.svg) [![Py versions](https://img.shields.io/pypi/pyversions/django-admin-interface.svg)](https://img.shields.io/pypi/pyversions/django-admin-interface.svg)
@@ -18,15 +18,17 @@ django-admin-interface is a modern **responsive flat admin interface customizabl
- List filter dropdown *(optional)* - List filter dropdown *(optional)*
- `NEW` **Related modal** *(instead of the old popup window, optional)* - `NEW` **Related modal** *(instead of the old popup window, optional)*
- `NEW` **Environment name/marker** - `NEW` **Environment name/marker**
- Style optimizations for: - `NEW` **Language chooser**
- Compatibility / Style optimizations for:
- `django-ckeditor` - `django-ckeditor`
- `django-dynamic-raw-id`
- `django-modeltranslation` - `django-modeltranslation`
- `django-tabbed-admin` - `django-tabbed-admin`
- `sorl-thumbnail` - `sorl-thumbnail`
## Requirements ## Requirements
- Python 2.7, 3.4, 3.5, 3.6, 3.7 - Python 2.7, 3.4, 3.5, 3.6, 3.7
- Django 1.7, 1.8, 1.9, 1.10, 1.11, 2.0, 2.1 - Django 1.7, 1.8, 1.9, 1.10, 1.11, 2.0, 2.1, 2.2
## Installation ## Installation
- Run `pip install django-admin-interface` - Run `pip install django-admin-interface`
-154
View File
@@ -1,154 +0,0 @@
|Build Status| |codecov| |Code Health| |PyPI version| |PyPI downloads| |Py versions| |License|
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**
- Style optimizations for:
- `django-ckeditor`
- `django-modeltranslation`
- `django-tabbed-admin`
- `sorl-thumbnail`
Requirements
------------
- Python 2.7, 3.4, 3.5, 3.6, 3.7
- Django 1.7, 1.8, 1.9, 1.10, 1.11, 2.0, 2.1
Installation
------------
- Run ``pip install django-admin-interface``
- Add ``admin_interface``, ``flat_responsive`` *(only if django version < 2.0)*, ``flat`` *(only if django version < 1.9)* and ``colorfield`` to ``settings.INSTALLED_APPS`` **before** ``django.contrib.admin``
- 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.
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``
License
-------
Released under **MIT License**.
.. |Build Status| image:: https://travis-ci.org/fabiocaccamo/django-admin-interface.svg?branch=master
.. |codecov| image:: https://codecov.io/gh/fabiocaccamo/django-admin-interface/branch/master/graph/badge.svg
.. |Code Health| image:: https://landscape.io/github/fabiocaccamo/django-admin-interface/master/landscape.svg?style=flat
.. |PyPI version| image:: https://badge.fury.io/py/django-admin-interface.svg
.. |PyPI downloads| image:: https://img.shields.io/pypi/dm/django-admin-interface.svg
.. |Py versions| image:: https://img.shields.io/pypi/pyversions/django-admin-interface.svg
.. |License| image:: https://img.shields.io/pypi/l/django-admin-interface.svg
.. |django-admin-interface_preview| image:: https://user-images.githubusercontent.com/1035294/35631521-64b0cab8-06a4-11e8-8f57-c04fdfbb7e8b.gif
.. |django-admin-interface_login| image:: https://cloud.githubusercontent.com/assets/1035294/11240233/55c8d4ba-8df1-11e5-9568-00fdc987ede8.gif
.. |django-admin-interface_dashboard| image:: https://cloud.githubusercontent.com/assets/1035294/11240239/627c0362-8df1-11e5-81fa-216366a5d8da.gif
.. |django-admin-interface_themes_management| image:: https://cloud.githubusercontent.com/assets/1035294/11240245/6cd1c342-8df1-11e5-928b-f22217474d3d.gif
.. |django-admin-interface_theme_customization| image:: https://cloud.githubusercontent.com/assets/1035294/11240250/7350d942-8df1-11e5-9b28-f2f54c333cdc.gif
+9
View File
@@ -10,6 +10,8 @@ class ThemeAdmin(admin.ModelAdmin):
list_display = ('name', 'active', ) list_display = ('name', 'active', )
list_editable = ('active', ) list_editable = ('active', )
list_per_page = 100
show_full_result_count = False
fieldsets = ( fieldsets = (
(None, { (None, {
@@ -25,6 +27,13 @@ class ThemeAdmin(admin.ModelAdmin):
'env_visible_in_favicon', 'env_visible_in_favicon',
) )
}), }),
(_('Language chooser'), {
'classes': ('wide', ),
'fields': (
'language_chooser_active',
'language_chooser_display',
)
}),
(_('Logo'), { (_('Logo'), {
'classes': ('wide', ), 'classes': ('wide', ),
'fields': ( 'fields': (
+20
View File
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from django.conf import settings
from django.core.cache import cache, caches
def app_cache():
return caches['admin_interface'] if 'admin_interface' in settings.CACHES else cache
def del_cached_active_theme():
app_cache().delete('admin_interface_theme')
def get_cached_active_theme():
return app_cache().get('admin_interface_theme', None)
def set_cached_active_theme(theme):
app_cache().set('admin_interface_theme', theme)
Binary file not shown.
+59 -45
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: django-admin-interface\n" "Project-Id-Version: django-admin-interface\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-20 16:12+0000\n" "POT-Creation-Date: 2019-09-04 09:18+0000\n"
"PO-Revision-Date: 2018-12-30 19:13-0500\n" "PO-Revision-Date: 2018-12-30 19:13-0500\n"
"Last-Translator: Martin Vuelta <martin.vuelta@softbutterfly.io>\n" "Last-Translator: Martin Vuelta <martin.vuelta@softbutterfly.io>\n"
"Language-Team: Spanish <dev@softbutterfly.io>\n" "Language-Team: Spanish <dev@softbutterfly.io>\n"
@@ -19,51 +19,55 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin_interface/admin.py:19 #: admin_interface/admin.py:21
msgid "Environment" msgid "Environment"
msgstr "Ambiente" msgstr "Ambiente"
#: admin_interface/admin.py:28 #: admin_interface/admin.py:30
msgid "Language chooser"
msgstr ""
#: admin_interface/admin.py:37
msgid "Logo" msgid "Logo"
msgstr "Logo" msgstr "Logo"
#: admin_interface/admin.py:36 #: admin_interface/admin.py:45
msgid "Favicon" msgid "Favicon"
msgstr "Favicon" msgstr "Favicon"
#: admin_interface/admin.py:40 #: admin_interface/admin.py:49
msgid "Title" msgid "Title"
msgstr "Título" msgstr "Título"
#: admin_interface/admin.py:48 #: admin_interface/admin.py:57
msgid "Header" msgid "Header"
msgstr "Encabezado" msgstr "Encabezado"
#: admin_interface/admin.py:57 #: admin_interface/admin.py:66
msgid "Breadcrumbs / Module headers" msgid "Breadcrumbs / Module headers"
msgstr "Breadcrumbs / Encabezados de módulos" msgstr "Breadcrumbs / Encabezados de módulos"
#: admin_interface/admin.py:67 #: admin_interface/admin.py:76
msgid "Generic Links" msgid "Generic Links"
msgstr "Enlaces genéricos" msgstr "Enlaces genéricos"
#: admin_interface/admin.py:74 #: admin_interface/admin.py:83
msgid "Save Buttons" msgid "Save Buttons"
msgstr "Botones de guardar" msgstr "Botones de guardar"
#: admin_interface/admin.py:82 #: admin_interface/admin.py:91
msgid "Delete Buttons" msgid "Delete Buttons"
msgstr "Botones de borrar" msgstr "Botones de borrar"
#: admin_interface/admin.py:90 #: admin_interface/admin.py:99
msgid "Related Modal" msgid "Related Modal"
msgstr "Modal para objetos relacionados" msgstr "Modal para objetos relacionados"
#: admin_interface/admin.py:99 #: admin_interface/admin.py:109
msgid "List Filter" msgid "List Filter"
msgstr "Lista de filtros" msgstr "Lista de filtros"
#: admin_interface/admin.py:103 #: admin_interface/admin.py:113
msgid "Recent Actions" msgid "Recent Actions"
msgstr "Acciones recientes" msgstr "Acciones recientes"
@@ -71,113 +75,123 @@ msgstr "Acciones recientes"
msgid "Admin Interface" msgid "Admin Interface"
msgstr "Interfaz de administración" msgstr "Interfaz de administración"
#: admin_interface/models.py:56 admin_interface/models.py:100 #: admin_interface/models.py:72 admin_interface/models.py:116
#: admin_interface/models.py:135
msgid "name" msgid "name"
msgstr "Nombre" msgstr "Nombre"
#: admin_interface/models.py:59 admin_interface/models.py:224 #: admin_interface/models.py:75 admin_interface/models.py:132
#: admin_interface/models.py:253
msgid "active" msgid "active"
msgstr "Activo" msgstr "Activo"
#: admin_interface/models.py:63 #: admin_interface/models.py:79
#: admin_interface/templates/admin/base_site.html:6 #: admin_interface/templates/admin/base_site.html:6
#: admin_interface/templates/admin/base_site.html:60 #: admin_interface/templates/admin/base_site.html:60
msgid "Django administration" msgid "Django administration"
msgstr "Administración de Django" msgstr "Administración de Django"
#: admin_interface/models.py:65 #: admin_interface/models.py:81
msgid "title" msgid "title"
msgstr "Título" msgstr "Título"
#: admin_interface/models.py:71 admin_interface/models.py:86 #: admin_interface/models.py:87 admin_interface/models.py:102
#: admin_interface/models.py:106 #: admin_interface/models.py:122
#, fuzzy #, fuzzy
#| msgid "logo color" #| msgid "logo color"
msgid "color" msgid "color"
msgstr "color de logo" msgstr "color de logo"
#: admin_interface/models.py:74 admin_interface/models.py:89 #: admin_interface/models.py:90 admin_interface/models.py:105
#: admin_interface/models.py:260 #: admin_interface/models.py:289
msgid "visible" msgid "visible"
msgstr "Visible" msgstr "Visible"
#: admin_interface/models.py:79 #: admin_interface/models.py:95
msgid "Leave blank to use the default Django logo" msgid "Leave blank to use the default Django logo"
msgstr "Dejar en blanco para usaer el logo por defecto de Django" msgstr "Dejar en blanco para usaer el logo por defecto de Django"
#: admin_interface/models.py:80 #: admin_interface/models.py:96
msgid "logo" msgid "logo"
msgstr "logo" msgstr "logo"
#: admin_interface/models.py:94 #: admin_interface/models.py:110
msgid "(.ico|.png|.gif - 16x16|32x32 px)" msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "Formatos ico, png o gif. Tamaños de 16x16 o 32x32 pixeles" msgstr "Formatos ico, png o gif. Tamaños de 16x16 o 32x32 pixeles"
#: admin_interface/models.py:95 #: admin_interface/models.py:111
msgid "favicon" msgid "favicon"
msgstr "favicon" msgstr "favicon"
#: admin_interface/models.py:104 #: admin_interface/models.py:120
msgid "" msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: " "(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)" "#3498DB)"
msgstr "" msgstr ""
#: admin_interface/models.py:109 #: admin_interface/models.py:125
msgid "visible in header (marker and name)" msgid "visible in header (marker and name)"
msgstr "" msgstr ""
#: admin_interface/models.py:112 #: admin_interface/models.py:128
msgid "visible in favicon (marker)" msgid "visible in favicon (marker)"
msgstr "" msgstr ""
#: admin_interface/models.py:119 admin_interface/models.py:144 #: admin_interface/models.py:134
#: admin_interface/models.py:185 admin_interface/models.py:204 msgid "code"
#: admin_interface/models.py:230 msgstr ""
#: admin_interface/models.py:141
msgid "display"
msgstr ""
#: admin_interface/models.py:148 admin_interface/models.py:173
#: admin_interface/models.py:214 admin_interface/models.py:233
#: admin_interface/models.py:259
msgid "background color" msgid "background color"
msgstr "color de fondo" msgstr "color de fondo"
#: admin_interface/models.py:125 admin_interface/models.py:150 #: admin_interface/models.py:154 admin_interface/models.py:179
#: admin_interface/models.py:197 admin_interface/models.py:216 #: admin_interface/models.py:226 admin_interface/models.py:245
#: admin_interface/models.py:220 #: admin_interface/models.py:249
msgid "text color" msgid "text color"
msgstr "color de texto" msgstr "color de texto"
#: admin_interface/models.py:131 admin_interface/models.py:156 #: admin_interface/models.py:160 admin_interface/models.py:185
#: admin_interface/models.py:172 #: admin_interface/models.py:201
msgid "link color" msgid "link color"
msgstr "color de enlace" msgstr "color de enlace"
#: admin_interface/models.py:137 admin_interface/models.py:162 #: admin_interface/models.py:166 admin_interface/models.py:191
#: admin_interface/models.py:178 #: admin_interface/models.py:207
msgid "link hover color" msgid "link hover color"
msgstr "color de enlace (hover)" msgstr "color de enlace (hover)"
#: admin_interface/models.py:165 admin_interface/models.py:250 #: admin_interface/models.py:194 admin_interface/models.py:279
msgid "rounded corners" msgid "rounded corners"
msgstr "esquinas redondas" msgstr "esquinas redondas"
#: admin_interface/models.py:191 admin_interface/models.py:210 #: admin_interface/models.py:220 admin_interface/models.py:239
msgid "background hover color" msgid "background hover color"
msgstr "color de fondo (hover)" msgstr "color de fondo (hover)"
#: admin_interface/models.py:247 #: admin_interface/models.py:276
msgid "background opacity" msgid "background opacity"
msgstr "opacidad de fondo" msgstr "opacidad de fondo"
#: admin_interface/models.py:253 #: admin_interface/models.py:282
msgid "close button visible" msgid "close button visible"
msgstr "" msgstr ""
#: admin_interface/models.py:257 #: admin_interface/models.py:286
msgid "use dropdown" msgid "use dropdown"
msgstr "Usar lista desplegable" msgstr "Usar lista desplegable"
#: admin_interface/models.py:269 #: admin_interface/models.py:298
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
#: admin_interface/models.py:270 #: admin_interface/models.py:299
msgid "Themes" msgid "Themes"
msgstr "Temas" msgstr "Temas"
Binary file not shown.
+59 -45
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-20 14:12-0400\n" "POT-Creation-Date: 2019-09-04 09:18+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,51 +18,55 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: admin_interface/admin.py:19 #: admin_interface/admin.py:21
msgid "Environment" msgid "Environment"
msgstr "Environnment" msgstr "Environnment"
#: admin_interface/admin.py:28 #: admin_interface/admin.py:30
msgid "Language chooser"
msgstr ""
#: admin_interface/admin.py:37
msgid "Logo" msgid "Logo"
msgstr "Logo" msgstr "Logo"
#: admin_interface/admin.py:36 #: admin_interface/admin.py:45
msgid "Favicon" msgid "Favicon"
msgstr "Favicon" msgstr "Favicon"
#: admin_interface/admin.py:40 #: admin_interface/admin.py:49
msgid "Title" msgid "Title"
msgstr "Titre" msgstr "Titre"
#: admin_interface/admin.py:48 #: admin_interface/admin.py:57
msgid "Header" msgid "Header"
msgstr "Bannière" msgstr "Bannière"
#: admin_interface/admin.py:57 #: admin_interface/admin.py:66
msgid "Breadcrumbs / Module headers" msgid "Breadcrumbs / Module headers"
msgstr "Fil d'ariane / en-têtes de module" msgstr "Fil d'ariane / en-têtes de module"
#: admin_interface/admin.py:67 #: admin_interface/admin.py:76
msgid "Generic Links" msgid "Generic Links"
msgstr "Liens génériques" msgstr "Liens génériques"
#: admin_interface/admin.py:74 #: admin_interface/admin.py:83
msgid "Save Buttons" msgid "Save Buttons"
msgstr "Boutons sauvegarder" msgstr "Boutons sauvegarder"
#: admin_interface/admin.py:82 #: admin_interface/admin.py:91
msgid "Delete Buttons" msgid "Delete Buttons"
msgstr "Boutons supprimer" msgstr "Boutons supprimer"
#: admin_interface/admin.py:90 #: admin_interface/admin.py:99
msgid "Related Modal" msgid "Related Modal"
msgstr "Modale pour objet reliés" msgstr "Modale pour objet reliés"
#: admin_interface/admin.py:100 #: admin_interface/admin.py:109
msgid "List Filter" msgid "List Filter"
msgstr "Filtre de liste" msgstr "Filtre de liste"
#: admin_interface/admin.py:104 #: admin_interface/admin.py:113
msgid "Recent Actions" msgid "Recent Actions"
msgstr "Actions récentes" msgstr "Actions récentes"
@@ -70,51 +74,53 @@ msgstr "Actions récentes"
msgid "Admin Interface" msgid "Admin Interface"
msgstr "Interface Admin" msgstr "Interface Admin"
#: admin_interface/models.py:56 admin_interface/models.py:100 #: admin_interface/models.py:72 admin_interface/models.py:116
#: admin_interface/models.py:135
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
#: admin_interface/models.py:59 admin_interface/models.py:224 #: admin_interface/models.py:75 admin_interface/models.py:132
#: admin_interface/models.py:253
msgid "active" msgid "active"
msgstr "actif" msgstr "actif"
#: admin_interface/models.py:63 #: admin_interface/models.py:79
#: admin_interface/templates/admin/base_site.html:6 #: admin_interface/templates/admin/base_site.html:6
#: admin_interface/templates/admin/base_site.html:60 #: admin_interface/templates/admin/base_site.html:60
msgid "Django administration" msgid "Django administration"
msgstr "Administration Django" msgstr "Administration Django"
#: admin_interface/models.py:65 #: admin_interface/models.py:81
msgid "title" msgid "title"
msgstr "titre" msgstr "titre"
#: admin_interface/models.py:71 admin_interface/models.py:86 #: admin_interface/models.py:87 admin_interface/models.py:102
#: admin_interface/models.py:106 #: admin_interface/models.py:122
msgid "color" msgid "color"
msgstr "couleur" msgstr "couleur"
#: admin_interface/models.py:74 admin_interface/models.py:89 #: admin_interface/models.py:90 admin_interface/models.py:105
#: admin_interface/models.py:260 #: admin_interface/models.py:289
msgid "visible" msgid "visible"
msgstr "visible" msgstr "visible"
#: admin_interface/models.py:79 #: admin_interface/models.py:95
msgid "Leave blank to use the default Django logo" msgid "Leave blank to use the default Django logo"
msgstr "Laisser vide pour utiliser le logo Django par défaut" msgstr "Laisser vide pour utiliser le logo Django par défaut"
#: admin_interface/models.py:80 #: admin_interface/models.py:96
msgid "logo" msgid "logo"
msgstr "logo" msgstr "logo"
#: admin_interface/models.py:94 #: admin_interface/models.py:110
msgid "(.ico|.png|.gif - 16x16|32x32 px)" msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "(.ico|.png|.gif - 16x16|32x32 px)" msgstr "(.ico|.png|.gif - 16x16|32x32 px)"
#: admin_interface/models.py:95 #: admin_interface/models.py:111
msgid "favicon" msgid "favicon"
msgstr "favicon" msgstr "favicon"
#: admin_interface/models.py:104 #: admin_interface/models.py:120
msgid "" msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: " "(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)" "#3498DB)"
@@ -122,61 +128,69 @@ msgstr ""
"(rouge: #E74C3C, orange: #E67E22, jaune: #F1C40F, vert: #2ECC71, bleu: " "(rouge: #E74C3C, orange: #E67E22, jaune: #F1C40F, vert: #2ECC71, bleu: "
"#3498DB)" "#3498DB)"
#: admin_interface/models.py:109 #: admin_interface/models.py:125
msgid "visible in header (marker and name)" msgid "visible in header (marker and name)"
msgstr "visible dans len-tête (marqueur et nom)" msgstr "visible dans len-tête (marqueur et nom)"
#: admin_interface/models.py:112 #: admin_interface/models.py:128
msgid "visible in favicon (marker)" msgid "visible in favicon (marker)"
msgstr "visible dans la favicon (marqueur)" msgstr "visible dans la favicon (marqueur)"
#: admin_interface/models.py:119 admin_interface/models.py:144 #: admin_interface/models.py:134
#: admin_interface/models.py:185 admin_interface/models.py:204 msgid "code"
#: admin_interface/models.py:230 msgstr ""
#: admin_interface/models.py:141
msgid "display"
msgstr ""
#: admin_interface/models.py:148 admin_interface/models.py:173
#: admin_interface/models.py:214 admin_interface/models.py:233
#: admin_interface/models.py:259
msgid "background color" msgid "background color"
msgstr "couleur d'arrière-plan" msgstr "couleur d'arrière-plan"
#: admin_interface/models.py:125 admin_interface/models.py:150 #: admin_interface/models.py:154 admin_interface/models.py:179
#: admin_interface/models.py:197 admin_interface/models.py:216 #: admin_interface/models.py:226 admin_interface/models.py:245
#: admin_interface/models.py:220 #: admin_interface/models.py:249
msgid "text color" msgid "text color"
msgstr "couleur du texte" msgstr "couleur du texte"
#: admin_interface/models.py:131 admin_interface/models.py:156 #: admin_interface/models.py:160 admin_interface/models.py:185
#: admin_interface/models.py:172 #: admin_interface/models.py:201
msgid "link color" msgid "link color"
msgstr "couleur de lien" msgstr "couleur de lien"
#: admin_interface/models.py:137 admin_interface/models.py:162 #: admin_interface/models.py:166 admin_interface/models.py:191
#: admin_interface/models.py:178 #: admin_interface/models.py:207
msgid "link hover color" msgid "link hover color"
msgstr "couleur de lien au survol" msgstr "couleur de lien au survol"
#: admin_interface/models.py:165 admin_interface/models.py:250 #: admin_interface/models.py:194 admin_interface/models.py:279
msgid "rounded corners" msgid "rounded corners"
msgstr "coins arrondis" msgstr "coins arrondis"
#: admin_interface/models.py:191 admin_interface/models.py:210 #: admin_interface/models.py:220 admin_interface/models.py:239
msgid "background hover color" msgid "background hover color"
msgstr "couleur de fond au survol" msgstr "couleur de fond au survol"
#: admin_interface/models.py:247 #: admin_interface/models.py:276
msgid "background opacity" msgid "background opacity"
msgstr "opacité de l'arrière-plan" msgstr "opacité de l'arrière-plan"
#: admin_interface/models.py:253 #: admin_interface/models.py:282
msgid "close button visible" msgid "close button visible"
msgstr "bouton fermer visible" msgstr "bouton fermer visible"
#: admin_interface/models.py:257 #: admin_interface/models.py:286
msgid "use dropdown" msgid "use dropdown"
msgstr "utiliser un menu déroulant" msgstr "utiliser un menu déroulant"
#: admin_interface/models.py:269 #: admin_interface/models.py:298
msgid "Theme" msgid "Theme"
msgstr "Thème" msgstr "Thème"
#: admin_interface/models.py:270 #: admin_interface/models.py:299
msgid "Themes" msgid "Themes"
msgstr "Thèmes" msgstr "Thèmes"
Binary file not shown.
+60 -46
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: django-admin-interface\n" "Project-Id-Version: django-admin-interface\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-20 16:12+0000\n" "POT-Creation-Date: 2019-09-04 09:19+0000\n"
"PO-Revision-Date: 2018-12-30 19:13-0500\n" "PO-Revision-Date: 2018-12-30 19:13-0500\n"
"Last-Translator: Fabio Caccamo <fabio.caccamo@gmail.com>\n" "Last-Translator: Fabio Caccamo <fabio.caccamo@gmail.com>\n"
"Language-Team: Italian <LL@li.org>\n" "Language-Team: Italian <LL@li.org>\n"
@@ -19,103 +19,109 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin_interface/admin.py:19 #: admin_interface/admin.py:21
msgid "Environment" msgid "Environment"
msgstr "Ambiente" msgstr "Ambiente"
#: admin_interface/admin.py:28 #: admin_interface/admin.py:30
msgid "Language chooser"
msgstr "Selettore di lingua"
#: admin_interface/admin.py:37
msgid "Logo" msgid "Logo"
msgstr "Logo" msgstr "Logo"
#: admin_interface/admin.py:36 #: admin_interface/admin.py:45
msgid "Favicon" msgid "Favicon"
msgstr "Favicon" msgstr "Favicon"
#: admin_interface/admin.py:40 #: admin_interface/admin.py:49
msgid "Title" msgid "Title"
msgstr "Titolo" msgstr "Titolo"
#: admin_interface/admin.py:48 #: admin_interface/admin.py:57
msgid "Header" msgid "Header"
msgstr "Header" msgstr "Header"
#: admin_interface/admin.py:57 #: admin_interface/admin.py:66
msgid "Breadcrumbs / Module headers" msgid "Breadcrumbs / Module headers"
msgstr "Breadcrumbs / Header dei moduli" msgstr "Breadcrumbs / Header dei moduli"
#: admin_interface/admin.py:67 #: admin_interface/admin.py:76
msgid "Generic Links" msgid "Generic Links"
msgstr "Link generici" msgstr "Link generici"
#: admin_interface/admin.py:74 #: admin_interface/admin.py:83
msgid "Save Buttons" msgid "Save Buttons"
msgstr "Pulsanti per salvare" msgstr "Pulsanti per salvare"
#: admin_interface/admin.py:82 #: admin_interface/admin.py:91
msgid "Delete Buttons" msgid "Delete Buttons"
msgstr "Pulsanti per eliminare" msgstr "Pulsanti per eliminare"
#: admin_interface/admin.py:90 #: admin_interface/admin.py:99
msgid "Related Modal" msgid "Related Modal"
msgstr "Modale per gli oggetti correlati" msgstr "Modale per gli oggetti correlati"
#: admin_interface/admin.py:99 #: admin_interface/admin.py:109
msgid "List Filter" msgid "List Filter"
msgstr "Filtro listato" msgstr "Filtro listato"
#: admin_interface/admin.py:103 #: admin_interface/admin.py:113
msgid "Recent Actions" msgid "Recent Actions"
msgstr "Azioni recenti" msgstr "Azioni recenti"
#: admin_interface/apps.py:11 #: admin_interface/apps.py:11
msgid "Admin Interface" msgid "Admin Interface"
msgstr "Interfaccia di admin" msgstr "Interfaccia di amministrazione"
#: admin_interface/models.py:56 admin_interface/models.py:100 #: admin_interface/models.py:72 admin_interface/models.py:116
#: admin_interface/models.py:135
msgid "name" msgid "name"
msgstr "nome" msgstr "nome"
#: admin_interface/models.py:59 admin_interface/models.py:224 #: admin_interface/models.py:75 admin_interface/models.py:132
#: admin_interface/models.py:253
msgid "active" msgid "active"
msgstr "attivo" msgstr "attivo"
#: admin_interface/models.py:63 #: admin_interface/models.py:79
#: admin_interface/templates/admin/base_site.html:6 #: admin_interface/templates/admin/base_site.html:6
#: admin_interface/templates/admin/base_site.html:60 #: admin_interface/templates/admin/base_site.html:60
msgid "Django administration" msgid "Django administration"
msgstr "Amministrazione di Django" msgstr "Amministrazione di Django"
#: admin_interface/models.py:65 #: admin_interface/models.py:81
msgid "title" msgid "title"
msgstr "titolo" msgstr "titolo"
#: admin_interface/models.py:71 admin_interface/models.py:86 #: admin_interface/models.py:87 admin_interface/models.py:102
#: admin_interface/models.py:106 #: admin_interface/models.py:122
msgid "color" msgid "color"
msgstr "colore" msgstr "colore"
#: admin_interface/models.py:74 admin_interface/models.py:89 #: admin_interface/models.py:90 admin_interface/models.py:105
#: admin_interface/models.py:260 #: admin_interface/models.py:289
msgid "visible" msgid "visible"
msgstr "visibile" msgstr "visibile"
#: admin_interface/models.py:79 #: admin_interface/models.py:95
msgid "Leave blank to use the default Django logo" msgid "Leave blank to use the default Django logo"
msgstr "Lasciare vuoto per usare il logo Django di default" msgstr "Lasciare vuoto per usare il logo Django di default"
#: admin_interface/models.py:80 #: admin_interface/models.py:96
msgid "logo" msgid "logo"
msgstr "logo" msgstr "logo"
#: admin_interface/models.py:94 #: admin_interface/models.py:110
msgid "(.ico|.png|.gif - 16x16|32x32 px)" msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "(formato ico, png o gif - dimensioni 16x16 o 32x32 px)" msgstr "(formato ico, png o gif - dimensioni 16x16 o 32x32 px)"
#: admin_interface/models.py:95 #: admin_interface/models.py:111
msgid "favicon" msgid "favicon"
msgstr "favicon" msgstr "favicon"
#: admin_interface/models.py:104 #: admin_interface/models.py:120
msgid "" msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: " "(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)" "#3498DB)"
@@ -123,61 +129,69 @@ msgstr ""
"(rosso: #E74C3C, arancione: #E67E22, giallo: #F1C40F, verde: #2ECC71, blu: " "(rosso: #E74C3C, arancione: #E67E22, giallo: #F1C40F, verde: #2ECC71, blu: "
"#3498DB)" "#3498DB)"
#: admin_interface/models.py:109 #: admin_interface/models.py:125
msgid "visible in header (marker and name)" msgid "visible in header (marker and name)"
msgstr "visibile nell'header (marker e nome)" msgstr "visibile nell'header (marker e nome)"
#: admin_interface/models.py:112 #: admin_interface/models.py:128
msgid "visible in favicon (marker)" msgid "visible in favicon (marker)"
msgstr "visibile nella favicon (marker)" msgstr "visibile nella favicon (marker)"
#: admin_interface/models.py:119 admin_interface/models.py:144 #: admin_interface/models.py:134
#: admin_interface/models.py:185 admin_interface/models.py:204 msgid "code"
#: admin_interface/models.py:230 msgstr "codice"
#: admin_interface/models.py:141
msgid "display"
msgstr "visualizzazione"
#: admin_interface/models.py:148 admin_interface/models.py:173
#: admin_interface/models.py:214 admin_interface/models.py:233
#: admin_interface/models.py:259
msgid "background color" msgid "background color"
msgstr "colore di sfondo" msgstr "colore di sfondo"
#: admin_interface/models.py:125 admin_interface/models.py:150 #: admin_interface/models.py:154 admin_interface/models.py:179
#: admin_interface/models.py:197 admin_interface/models.py:216 #: admin_interface/models.py:226 admin_interface/models.py:245
#: admin_interface/models.py:220 #: admin_interface/models.py:249
msgid "text color" msgid "text color"
msgstr "colore del testo" msgstr "colore del testo"
#: admin_interface/models.py:131 admin_interface/models.py:156 #: admin_interface/models.py:160 admin_interface/models.py:185
#: admin_interface/models.py:172 #: admin_interface/models.py:201
msgid "link color" msgid "link color"
msgstr "colore dei link" msgstr "colore dei link"
#: admin_interface/models.py:137 admin_interface/models.py:162 #: admin_interface/models.py:166 admin_interface/models.py:191
#: admin_interface/models.py:178 #: admin_interface/models.py:207
msgid "link hover color" msgid "link hover color"
msgstr "colore dei link in hover" msgstr "colore dei link in hover"
#: admin_interface/models.py:165 admin_interface/models.py:250 #: admin_interface/models.py:194 admin_interface/models.py:279
msgid "rounded corners" msgid "rounded corners"
msgstr "bordi arrotondati" msgstr "bordi arrotondati"
#: admin_interface/models.py:191 admin_interface/models.py:210 #: admin_interface/models.py:220 admin_interface/models.py:239
msgid "background hover color" msgid "background hover color"
msgstr "colore di sfondo in hover" msgstr "colore di sfondo in hover"
#: admin_interface/models.py:247 #: admin_interface/models.py:276
msgid "background opacity" msgid "background opacity"
msgstr "opacità dello sfondo" msgstr "opacità dello sfondo"
#: admin_interface/models.py:253 #: admin_interface/models.py:282
msgid "close button visible" msgid "close button visible"
msgstr "pulsante chiudi visibile" msgstr "pulsante chiudi visibile"
#: admin_interface/models.py:257 #: admin_interface/models.py:286
msgid "use dropdown" msgid "use dropdown"
msgstr "usa dropdown" msgstr "usa dropdown"
#: admin_interface/models.py:269 #: admin_interface/models.py:298
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
#: admin_interface/models.py:270 #: admin_interface/models.py:299
msgid "Themes" msgid "Themes"
msgstr "Temi" msgstr "Temi"
@@ -12,7 +12,11 @@ class Migration(migrations.Migration):
] ]
operations = [ operations = [
migrations.AlterField( migrations.RemoveField(
model_name='theme',
name='related_modal_background_opacity'
),
migrations.AddField(
model_name='theme', model_name='theme',
name='related_modal_background_opacity', name='related_modal_background_opacity',
field=models.CharField( field=models.CharField(
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0013_add_related_modal_close_button'),
]
operations = [
migrations.AlterField(
model_name='theme',
name='name',
field=models.CharField(default='Django', max_length=50, unique=True, verbose_name='name'),
),
]
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0014_name_unique'),
]
operations = [
migrations.AddField(
model_name='theme',
name='language_chooser_active',
field=models.BooleanField(default=True, verbose_name='active'),
),
]
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0015_add_language_chooser_active'),
]
operations = [
migrations.AddField(
model_name='theme',
name='language_chooser_display',
field=models.CharField(choices=[('code', 'code'), ('name', 'name')], default='code', max_length=10, verbose_name='display'),
),
]
+31 -1
View File
@@ -3,30 +3,45 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.db.models.signals import post_delete, post_save from django.db.models.signals import post_delete, post_save, pre_save
from django.utils.encoding import python_2_unicode_compatible, force_text from django.utils.encoding import python_2_unicode_compatible, force_text
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from colorfield.fields import ColorField from colorfield.fields import ColorField
from admin_interface.cache import del_cached_active_theme
@python_2_unicode_compatible @python_2_unicode_compatible
class Theme(models.Model): class Theme(models.Model):
@staticmethod @staticmethod
def post_migrate_handler(**kwargs): def post_migrate_handler(**kwargs):
del_cached_active_theme()
Theme.get_active_theme() Theme.get_active_theme()
@staticmethod @staticmethod
def post_delete_handler(**kwargs): def post_delete_handler(**kwargs):
del_cached_active_theme()
Theme.get_active_theme() Theme.get_active_theme()
@staticmethod @staticmethod
def post_save_handler(instance, **kwargs): def post_save_handler(instance, **kwargs):
del_cached_active_theme()
if instance.active: if instance.active:
Theme.objects.exclude(pk=instance.pk).update(active=False) Theme.objects.exclude(pk=instance.pk).update(active=False)
Theme.get_active_theme() Theme.get_active_theme()
@staticmethod
def pre_save_handler(instance, **kwargs):
if instance.pk is None:
try:
obj = Theme.objects.get(name=instance.name)
if obj:
instance.pk = obj.pk
except Theme.DoesNotExist:
pass
@staticmethod @staticmethod
def get_active_theme(): def get_active_theme():
objs_manager = Theme.objects objs_manager = Theme.objects
@@ -51,6 +66,7 @@ class Theme(models.Model):
return obj return obj
name = models.CharField( name = models.CharField(
unique=True,
max_length=50, max_length=50,
default='Django', default='Django',
verbose_name=_('name')) verbose_name=_('name'))
@@ -111,6 +127,19 @@ class Theme(models.Model):
default=True, default=True,
verbose_name=_('visible in favicon (marker)')) verbose_name=_('visible in favicon (marker)'))
language_chooser_active = models.BooleanField(
default=True,
verbose_name=_('active'))
language_chooser_display_choices = (
('code', _('code'), ),
('name', _('name'), ),
)
language_chooser_display = models.CharField(
max_length=10,
choices=language_chooser_display_choices,
default='code',
verbose_name=_('display'))
css_header_background_color = ColorField( css_header_background_color = ColorField(
blank=True, blank=True,
default='#0C4B33', default='#0C4B33',
@@ -275,3 +304,4 @@ class Theme(models.Model):
post_delete.connect(Theme.post_delete_handler, sender=Theme) post_delete.connect(Theme.post_delete_handler, sender=Theme)
post_save.connect(Theme.post_save_handler, sender=Theme) post_save.connect(Theme.post_save_handler, sender=Theme)
pre_save.connect(Theme.pre_save_handler, sender=Theme)
@@ -78,12 +78,10 @@ if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
} }
// build the iframe html // build the iframe html
var iframeHTML = '<div class="related-modal-iframe-container">' + var iframeHTML = '<iframe id="related-modal-iframe" name="' + iframeName + '" src="' + iframeSrc + '"></iframe>';
'<iframe id="related-modal-iframe" name="' + iframeName + '" src="' + iframeSrc + '"></iframe>' + var modalHTML = '<div class="related-modal-iframe-container">' + iframeHTML + '</div>';
'</div>'; var modalEl = $(modalHTML);
var iframeEl = modalEl.find('#related-modal-iframe');
// create the iframe jquery element
var iframeEl = $(iframeHTML);
if (e.data.lookup === true) if (e.data.lookup === true)
{ {
@@ -111,7 +109,7 @@ if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
showCloseBtn: true, showCloseBtn: true,
closeBtnInside: true, closeBtnInside: true,
items: { items: {
src: iframeEl, src: modalEl,
type: 'inline' type: 'inline'
} }
}); });
@@ -120,17 +118,31 @@ if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
} }
// listen click events on related links // listen click events on related links
function presentRelatedObjectModalOnClickOn(selector, lookup) {
var data = {
lookup:(lookup === true ? true : false)
};
var el = $(selector);
el.removeAttr('onclick');
el.unbind('click');
el.click(data, presentRelatedObjectModal);
}
// django 1.7 compatibility // django 1.7 compatibility
$('a.add-another').removeAttr('onclick'); // $('a.add-another').removeAttr('onclick').click({ lookup:false }, presentRelatedObjectModal);
$('a.add-another').click({ lookup:false }, presentRelatedObjectModal); presentRelatedObjectModalOnClickOn('a.add-another');
// django 1.8 and above // django 1.8 and above
$('a.related-widget-wrapper-link').click({ lookup:false }, presentRelatedObjectModal); // $('a.related-widget-wrapper-link').click({ lookup:false }, presentRelatedObjectModal);
presentRelatedObjectModalOnClickOn('a.related-widget-wrapper-link');
// raw_id_fields support // raw_id_fields support
$('a.related-lookup').unbind('click'); // $('a.related-lookup').unbind('click').click({ lookup:true }, presentRelatedObjectModal);
$('a.related-lookup').click({ lookup:true }, presentRelatedObjectModal); presentRelatedObjectModalOnClickOn('a.related-lookup', true);
// django-dynamic-raw-id support - #61
// https://github.com/lincolnloop/django-dynamic-raw-id
presentRelatedObjectModalOnClickOn('a.dynamic_raw_id-related-lookup', true);
}); });
})(django.jQuery); })(django.jQuery);
@@ -64,5 +64,9 @@ https://github.com/fabiocaccamo/django-admin-interface
{% block welcome-msg %} {% block welcome-msg %}
{% get_admin_interface_theme as theme %} {% get_admin_interface_theme as theme %}
{% if theme.language_chooser_active %}
{% get_admin_interface_languages as languages %}
{% include "admin_interface/language_chooser.html" %}
{% endif %}
{% if theme.env_visible_in_header %}<span class="environment-label {{ theme.env_name }}"></span> - {% endif %}{{ block.super }}<br> {% if theme.env_visible_in_header %}<span class="environment-label {{ theme.env_name }}"></span> - {% endif %}{{ block.super }}<br>
{% endblock %} {% endblock %}
@@ -23,6 +23,20 @@
content: "{{ theme.env_name }}"; content: "{{ theme.env_name }}";
} }
.admin-interface .language-chooser {
display: inline-block;
float: right;
margin-left: 20px;
}
.admin-interface .language-chooser-hidden-form {
display: none;
}
.admin-interface .language-chooser-select-form {
display: inline-block;
}
.admin-interface #branding h1 { .admin-interface #branding h1 {
color: {{ theme.title_color }}; color: {{ theme.title_color }};
} }
@@ -255,3 +269,7 @@
border-radius:4px; border-radius:4px;
{% endif %} {% endif %}
} }
.admin-interface .select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
background-color: {{ theme.css_header_background_color }};
}
@@ -0,0 +1,20 @@
{% load admin_interface_tags %}
{% if languages %}
<div class="language-chooser">
{% for language in languages %}
<form class="language-chooser-hidden-form" id="language-chooser-hidden-form-{{ language.code }}" action="{{ language.activation_url }}" method="POST">
{% csrf_token %}
<input name="language" type="hidden" value="{{ language.code }}" />
</form>
{% endfor %}
<form class="language-chooser-select-form">
{% csrf_token %}
<select name="language" onchange="document.getElementById(String('language-chooser-hidden-form-' + this.value)).submit();">
{% for language in languages %}
<option value="{{ language.code }}" {% if language.active %}selected{% endif %}>{% if theme.language_chooser_display == 'code' %}{{ language.code|upper }}{% elif theme.language_chooser_display == 'name' %}{{ language.name }}{% endif %}</option>
{% endfor %}
</select>
</form>
</div>
{% endif %}
@@ -1,10 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import django
from django import template, VERSION from django import template, VERSION
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.utils import translation
from admin_interface.cache import get_cached_active_theme, set_cached_active_theme
from admin_interface.models import Theme from admin_interface.models import Theme
from admin_interface.version import __version__ from admin_interface.version import __version__
import re
register = template.Library() register = template.Library()
if VERSION < (1, 9): if VERSION < (1, 9):
@@ -14,19 +25,53 @@ else:
@simple_tag(takes_context=True) @simple_tag(takes_context=True)
def get_admin_interface_theme(context): def get_admin_interface_languages(context):
theme = None if not settings.USE_I18N:
# i18n disabled
return None
if len(settings.LANGUAGES) < 2:
# less than 2 languages
return None
try:
set_language_url = reverse('set_language')
except NoReverseMatch:
# ImproperlyConfigured - must include i18n urls:
# urlpatterns += [url(r'^i18n/', include('django.conf.urls.i18n')),]
return None
request = context.get('request', None) request = context.get('request', None)
if not request:
return None
full_path = request.get_full_path()
admin_nolang_url = re.sub(r'^\/([\w]{2})([\-\_]{1}[\w]{2})?\/', '/', full_path)
if admin_nolang_url == full_path:
# ImproperlyConfigured - must include admin urls using i18n_patterns:
# from django.conf.urls.i18n import i18n_patterns
# urlpatterns += i18n_patterns(url(r'^admin/', admin.site.urls))
return None
langs_data = []
default_lang_code = settings.LANGUAGE_CODE
current_lang_code = translation.get_language() or default_lang_code
for language in settings.LANGUAGES:
lang_code = language[0].lower()
lang_name = language[1].title()
lang_data = {
'code': lang_code,
'name': lang_name,
'default': lang_code == default_lang_code,
'active': lang_code == current_lang_code,
'activation_url': '{}?next=/{}{}'.format(
set_language_url, lang_code, admin_nolang_url)
}
langs_data.append(lang_data)
return langs_data
if request:
theme = getattr(request, 'admin_interface_theme', None)
@simple_tag(takes_context=True)
def get_admin_interface_theme(context):
theme = get_cached_active_theme()
if not theme: if not theme:
theme = Theme.get_active_theme() theme = Theme.get_active_theme()
set_cached_active_theme(theme)
if request:
request.admin_interface_theme = theme
return theme return theme
+1 -1
View File
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
__version__ = '0.10.1' __version__ = '0.11.2'
+4 -1
View File
@@ -10,7 +10,8 @@ exec(open('admin_interface/version.py').read())
github_url = 'https://github.com/fabiocaccamo' github_url = 'https://github.com/fabiocaccamo'
package_name = 'django-admin-interface' package_name = 'django-admin-interface'
package_path = os.path.abspath(os.path.dirname(__file__)) package_path = os.path.abspath(os.path.dirname(__file__))
long_description_file_path = os.path.join(package_path, 'README.rst') long_description_file_path = os.path.join(package_path, 'README.md')
long_description_content_type = 'text/markdown'
long_description = '' long_description = ''
try: try:
with open(long_description_file_path) as f: with open(long_description_file_path) as f:
@@ -25,6 +26,7 @@ setup(
version=__version__, version=__version__,
description='django-admin-interface is a modern responsive flat admin interface customizable by the admin itself.', description='django-admin-interface is a modern responsive flat admin interface customizable by the admin itself.',
long_description=long_description, long_description=long_description,
long_description_content_type=long_description_content_type,
author='Fabio Caccamo', author='Fabio Caccamo',
author_email='fabio.caccamo@gmail.com', author_email='fabio.caccamo@gmail.com',
url='%s/%s' % (github_url, package_name, ), url='%s/%s' % (github_url, package_name, ),
@@ -47,6 +49,7 @@ setup(
'Framework :: Django :: 1.11', 'Framework :: Django :: 1.11',
'Framework :: Django :: 2.0', 'Framework :: Django :: 2.0',
'Framework :: Django :: 2.1', 'Framework :: Django :: 2.1',
'Framework :: Django :: 2.2',
'Intended Audience :: Developers', 'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License', 'License :: OSI Approved :: MIT License',
'Natural Language :: English', 'Natural Language :: English',
+46
View File
@@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
from django.core.management import call_command
from django.test import TestCase
from admin_interface.models import Theme
class AdminInterfaceFixturesTestCase(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def __load_theme(self, theme_name):
call_command('loaddata', 'admin_interface_theme_%s.json' % (theme_name, ))
def test_import_all(self):
self.__load_theme('django')
self.__load_theme('bootstrap')
self.__load_theme('foundation')
self.__load_theme('uswds')
self.assertEqual(Theme.objects.count(), 4);
def test_import_idempotency(self):
self.__load_theme('django')
self.__load_theme('django')
self.__load_theme('django')
self.__load_theme('django')
self.__load_theme('django')
self.assertEqual(Theme.objects.count(), 1);
self.__load_theme('bootstrap')
self.__load_theme('bootstrap')
self.__load_theme('bootstrap')
self.assertEqual(Theme.objects.count(), 2);
def test_import_override(self):
obj1 = Theme.get_active_theme()
obj1.title = 'Custom 1'
obj1.save()
self.__load_theme('django')
obj2 = Theme.get_active_theme()
self.assertEqual(obj1.pk, obj2.pk)
self.assertTrue(obj1.title != obj2.title)
+4 -3
View File
@@ -2,9 +2,9 @@
envlist = envlist =
py27-{dj17,dj18,dj19,dj110,dj111}-{sqlite,postgres}, py27-{dj17,dj18,dj19,dj110,dj111}-{sqlite,postgres},
py34-{dj17,dj18,dj19,dj110,dj111,dj20}-{sqlite,postgres}, py34-{dj17,dj18,dj19,dj110,dj111,dj20}-{sqlite,postgres},
py35-{dj18,dj19,dj110,dj111,dj20,dj21}-{sqlite,postgres}, py35-{dj18,dj19,dj110,dj111,dj20,dj21,dj22}-{sqlite,postgres},
py36-{dj18,dj19,dj110,dj111,dj20,dj21,djmaster}-{sqlite,postgres}, py36-{dj18,dj19,dj110,dj111,dj20,dj21,dj22,djmaster}-{sqlite,postgres},
py37-{dj20,dj21,djmaster}-{sqlite,postgres}, py37-{dj20,dj21,dj22,djmaster}-{sqlite,postgres},
[testenv] [testenv]
passenv = CI TRAVIS TRAVIS_* passenv = CI TRAVIS TRAVIS_*
deps = deps =
@@ -15,6 +15,7 @@ deps =
dj111: Django >= 1.11, < 1.12 dj111: Django >= 1.11, < 1.12
dj20: Django >= 2.0, < 2.1 dj20: Django >= 2.0, < 2.1
dj21: Django >= 2.1, < 2.2 dj21: Django >= 2.1, < 2.2
dj22: Django >= 2.2, < 2.3
djmaster: https://github.com/django/django/archive/master.tar.gz djmaster: https://github.com/django/django/archive/master.tar.gz
# mysql: mysqlclient # mysql: mysqlclient
postgres: psycopg2-binary postgres: psycopg2-binary