{ "info": { "author": "Cesar Abel Ramirez", "author_email": "xangcastle@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development :: Libraries", "Topic :: Utilities" ], "description": "# grappelli_extras\n\n[![Latest PyPI version](https://img.shields.io/pypi/v/django-grappelli-extras.svg)](https://crate.io/packages/django-grappelli-extras/)\n\n[![Number of PyPI downloads](https://img.shields.io/pypi/l/django-grappelli-extras.svg)](https://crate.io/packages/django-grappelli-extras/)\n\n# Requirements\n* Python = 3\n* Django >= 2.1\n* django-grappelli >= 2.11.1\n\n# Installation\n\n* ```pip install django-grappelli-extras```\n\n## settings.py\n\n * Put 'grappelli_extras' **before** 'grappelli' on INSTALLED_APPS\n\n```python\n# Your setting will look like:\nINSTALLED_APPS = [\n 'grappelli_extras',\n 'grappelli',\n 'import_export',\n 'adminactions',\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n # continue with your apps\n]\n```\n\n* Put 'applist' in your active context_processors.\n```python\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n 'grappelli_extras.context_processors.applist',\n \n # if you need to add customs menu\n 'grappelli_extras.context_processors.extra_menus',\n ],\n },\n },\n]\n```\n\n\nTo configure the extra menus than you need please add the following config\nyour settings:\n\n```python\nEXTRA_MENUS = [\n {'menu': 'Reports', 'link': '#',\n\n 'options': [\n {'link': '/reports/report1', 'label': 'Report # 1',\n 'perm': 'app.can_report_1'},\n {'link': '/reports/report2', 'label': 'Report # 2',\n 'perm': 'app.can_report_2'},\n ]\n\n },\n]\n```\n\n\n\n## urls.py\n\n * Put grappelli extras urls in 'urlpatterns':\n\n```python\n# Your urls will look like:\nfrom django.contrib import admin\nfrom django.urls import path, include\n\nurlpatterns = [\n path('admin/', admin.site.urls),\n path('grappelli/', include('grappelli.urls')),\n path('admin/ajax/', include('grappelli_extras.ajax_urls')),\n path('admin/extras/', include('grappelli_extras.extras_urls')),\n]\n```\n\n\nAvailable features:\n\n* [Header navbar](#navbar)\nAdd a dynamic navbar that change according to user permissions\n\n* [Add Links](#add-links)\nAdd addlink for each model in the nabvar according to user permissions.\n\n* [Traslation](#translation)\nTraslation Suport by Locales.\n\n* [Ajax](#ajax)\nAn Ajax api to make queries to django OMR using generics views.\nThe ajax url list are:\n\n * \"{% url 'ajax_getCollection' %}\"\n * \"{% url 'ajax_getObject' %}\"\n * \"{% url 'ajax_autocomplete' %}\"\n \nBut if you need to use in a javascript file out of a django template, you can use as:\n\n * $ajax_getColletion\n * $ajax_getObject\n * $ajax_autocomplete\n\nThis is the way than you must to define your models\nthe class base from grappelli_extras contain important functions for the models\n\n```python\nfrom django.db import models\nfrom grappelli_extras.models import base, BaseEntity\nfrom django.template.loader import render_to_string\n\n\nclass Foo(BaseEntity):\n \"\"\"\n A usual model than requiere to have a code, name and active condition.\n This the code left in blank under the creation of the object the code will be autogerenate.\n\n \"\"\"\n date = models.DateTimeField()\n title = models.CharField(max_length=250)\n description = models.TextField(max_length=600, null=True, blank=True)\n\n def render_as_table(self):\n return render_to_string(\"app/foo.html\", {'obj': self})\n\n\nclass Bar(base):\n \"\"\"\n A usual related model for Foo\n \"\"\"\n foo = models.ForeignKey(Foo, on_delete=models.CASCADE)\n value = models.FloatField(default=0.0)\n \n\n```\n\n\n# Using Autocomplete generic view\n```html\n\n\n\n\n\n```\n\n# Using GetCollection generic view\n```html\n\n\n\n```\n\n# Using GetObject generic view\n```html\n\n\n\n```\n\n# Using ObjectView generic view\nFirst define the method returning a html string\n```python\nfrom grappelli_extras.models import BaseEntity\nfrom django.template.loader import render_to_string\n\nclass Foo(BaseEntity):\n ...\n def render_as_table(self):\n return render_to_string(\"app/foo.html\", {'obj': self})\n\n```\n\nIn the html template render using django tags and filters as usual\n```djangotemplate\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Foo Object
KeyValue
ID{{obj.id}}
CODE{{obj.code}}
NAME{{obj.name}}
\n\n```\nAfter when you need to render this conten by Ajax\n```html\n\n\n
\n\n\n```\n\n# Working with jQuery pluggins.\nLet start with datatables.\n\nIn your template include the js script ajax token.js after jQuery to keep secure the request.\nAnd include all css and js as you need.\n\n```djangotemplate\n\n\n\n \n Title\n\n\n{% load static %}\n\n
\n\n\n\n\n\n\n\n\n\n\n```\n\n\nNow lets try with fullcalendar\n```djangotemplate\n\n\n\n \n Title\n\n\n{% load static %}\n
\n\n\n\n\n\n\n\n\n\n\n\n```\n\nNow we can try by POST with more advanced filters. But don't forget to include ajax/token.js, is\ndiferent form grp-token.js, grp-token must to by used inside grappelli pages.\n\n```djangotemplate\n\n\n\n \n Title\n\n\n{% load static %}\n
\n\n\n\n\n\n\n\n\n\n```\n\n\nYou can add filters like a json see doc.\nFull documentation is pending, in need time. Working so hard for now...:(\n\n* [Integration](#integration)*\nIntegration of adminactions, filebrowser, import_export modules.\n\n* [Integration](#jquery)\nInclude a Jquery Plugin to creade modals with objects json getting data from django OMR.\n\n## To run test project\n\n```\ncd ~/grappelli_extras/testapp\npip install -r requirements.txt\npython manage.py makemigrations\npython manage.py migrate\npython manage.py createsuperuser\npython manage.py runserver\n```\n\n## Contributing\n\n1. Fork it.\n2. Create your feature branch. (`git checkout -b my-new-feature`)\n3. Commit your changes. (`git commit -am 'Add some feature'`)\n4. Push to the branch. (`git push origin my-new-feature`)\n5. Create new Pull Request.\n\nThank You", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/xangcastle/grappelli_extras/", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "django-grappelli-extras", "package_url": "https://pypi.org/project/django-grappelli-extras/", "platform": "", "project_url": "https://pypi.org/project/django-grappelli-extras/", "project_urls": { "Homepage": "https://github.com/xangcastle/grappelli_extras/" }, "release_url": "https://pypi.org/project/django-grappelli-extras/1.2.1/", "requires_dist": null, "requires_python": "", "summary": "Ajax, Extensions and Extras for Grappelli Admin interface", "version": "1.2.1" }, "last_serial": 5915819, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "41c7f624a5279d387e7931ceee433aa5", "sha256": "b877b0faec13ac9b6c127ed46eb3d448119880381bf72a6c5fe11d68f9a8a8c9" }, "downloads": -1, "filename": "django_grappelli_extras-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "41c7f624a5279d387e7931ceee433aa5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8156, "upload_time": "2018-08-21T09:01:22", "url": "https://files.pythonhosted.org/packages/b8/e6/74608caa236ac31bfd4bdeff388f37fa1082c0d96dc9db2d581c65c62ba3/django_grappelli_extras-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7de25d8209a555b47276e332919c7364", "sha256": "0f0e36c9b46438f497ac090eb6beaa8551cde7d29ce03be2232ac1c02d34393c" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.0.tar.gz", "has_sig": false, "md5_digest": "7de25d8209a555b47276e332919c7364", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6097, "upload_time": "2018-08-21T09:01:23", "url": "https://files.pythonhosted.org/packages/16/31/824ef2388240493fcd7d16e39bbb50a4a23a9ab59ece53614e1fc9f6bf8e/django-grappelli-extras-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "4c2ed1af0ffc8a0e98f70e53b1f8421a", "sha256": "72af7be48a8b11d0ca62a1d206dfedcc99099a19a1a2b33078f35fca48f79d6d" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.1.tar.gz", "has_sig": false, "md5_digest": "4c2ed1af0ffc8a0e98f70e53b1f8421a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6083, "upload_time": "2018-08-21T09:38:49", "url": "https://files.pythonhosted.org/packages/40/1f/502b9841535a94460c4b470b0c4ccbacae30e949b52a1ab1abd2d3e000a6/django-grappelli-extras-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "57372ea1da69d43033e4ccf4e310577b", "sha256": "a7dc63765aa82a320e6afc9937e0e223b3b78efbb749379fd65f16f21c677468" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.2.tar.gz", "has_sig": false, "md5_digest": "57372ea1da69d43033e4ccf4e310577b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6086, "upload_time": "2018-08-21T09:39:21", "url": "https://files.pythonhosted.org/packages/8b/d3/c8750d857ba0e192f5b40599cbe5d499eda2b0dba33ee9f15a2f80d133c8/django-grappelli-extras-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "a5b4c36a14cf34595240d678ce480566", "sha256": "173d4fef48f65bec62cdb02bf5cc398e6f59c0b62fcdb42c07cab05a5abf1635" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.3.tar.gz", "has_sig": false, "md5_digest": "a5b4c36a14cf34595240d678ce480566", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9306, "upload_time": "2018-08-22T09:53:50", "url": "https://files.pythonhosted.org/packages/c5/7a/c52fceadef599e4b2e63958910a0879f2d13616550b54644f50ae2eb1e87/django-grappelli-extras-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "6a6720a9110fc9e220b75ef341735772", "sha256": "c8d130681e954cf40696b37e5cb20462e96f1f3b5e9639c07750f3b6016561f4" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.4.tar.gz", "has_sig": false, "md5_digest": "6a6720a9110fc9e220b75ef341735772", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9252, "upload_time": "2018-08-22T10:27:29", "url": "https://files.pythonhosted.org/packages/17/6e/8d0094f7fed3cbb148966b3e9b5c75b28dba4bfe1721c496e7d5abc2ffe7/django-grappelli-extras-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "4d26583911628d9aa1ed55dd392a47c5", "sha256": "214327886a6fb39e36c6568e1d1c43609490a7a9669e4edfdce81d23c938a01b" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.5.tar.gz", "has_sig": false, "md5_digest": "4d26583911628d9aa1ed55dd392a47c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9604, "upload_time": "2018-08-22T10:45:31", "url": "https://files.pythonhosted.org/packages/1a/5d/2177d47684d4378282dc4e5960e51ba66299badb415a14448c17a987f3db/django-grappelli-extras-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "2fc9363a180454cebd509d638ccbbb22", "sha256": "3122922c52b3dc74d77c8704ce80bea86969766ef93237431af029319b5c505d" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.6.tar.gz", "has_sig": false, "md5_digest": "2fc9363a180454cebd509d638ccbbb22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10010, "upload_time": "2018-08-22T11:21:38", "url": "https://files.pythonhosted.org/packages/5f/26/4b01280e17c48967f8167073ef99bcc6c0624c15a73101d27d52be196219/django-grappelli-extras-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "6bf8caa98f0273dfa88a4cbc0eee0abf", "sha256": "1b195fbc87c3db21bbd1e15d36ae09d71436c44d15a24d67dc64aab1343e45d4" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.7.tar.gz", "has_sig": false, "md5_digest": "6bf8caa98f0273dfa88a4cbc0eee0abf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10004, "upload_time": "2018-08-22T11:25:37", "url": "https://files.pythonhosted.org/packages/31/65/ede4d89304bad64821bebfda22676e956adab7e0b0aa9a45901099880228/django-grappelli-extras-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "100c84f7bf1319e116b2064474ef8fb8", "sha256": "f1b42631efcfb08fb825534e074abc2144914d0d4e42550eff6e05bdb6d75c70" }, "downloads": -1, "filename": "django_grappelli_extras-1.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "100c84f7bf1319e116b2064474ef8fb8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15269, "upload_time": "2018-11-23T19:42:37", "url": "https://files.pythonhosted.org/packages/ba/92/fc3b576d5039f876defd34005b5007cb84ad8a14563ca407cfb37ea69fb6/django_grappelli_extras-1.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cde9638a067184ee3ab95efea37b0d40", "sha256": "f97aebc1f5e2333d676a07f3766c42cdff3039a80de322bf747e6aab19fdd8fe" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.8.tar.gz", "has_sig": false, "md5_digest": "cde9638a067184ee3ab95efea37b0d40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11715, "upload_time": "2018-11-23T19:42:44", "url": "https://files.pythonhosted.org/packages/4c/57/7f9009f9e63cf8366f18d80840f14335fd9d322d1fd9c97946be98863bec/django-grappelli-extras-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "3ca61df222b1885a4c836bcf4b52beba", "sha256": "039bb17344877e2a4a7f0ddf61dd3f587bc7aa847c77b867bfcac6e832f76b34" }, "downloads": -1, "filename": "django_grappelli_extras-1.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "3ca61df222b1885a4c836bcf4b52beba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15282, "upload_time": "2018-11-23T19:42:39", "url": "https://files.pythonhosted.org/packages/8e/26/7010866e43e631cc3e849f3ddcd23c3898b6035d88510e21ff5f0446462a/django_grappelli_extras-1.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de7bc4ac164229bafb9660300e134389", "sha256": "72e07e1293e11dd8c394cb2445f9743e858d892dc55b2672cc4f413a2a1d33a9" }, "downloads": -1, "filename": "django-grappelli-extras-1.0.9.tar.gz", "has_sig": false, "md5_digest": "de7bc4ac164229bafb9660300e134389", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11732, "upload_time": "2018-09-02T05:49:04", "url": "https://files.pythonhosted.org/packages/29/5f/e5c94170e6879fa05c32ae9ab8f7f99d5b9af59a6acbef98487f44d2062a/django-grappelli-extras-1.0.9.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "4985f322aecc88964aa7094837740fa3", "sha256": "096e0fb875116166988cec7f8ec08941845ffb8d0904115a302f0b48a456b1ec" }, "downloads": -1, "filename": "django_grappelli_extras-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4985f322aecc88964aa7094837740fa3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15276, "upload_time": "2018-11-23T19:42:42", "url": "https://files.pythonhosted.org/packages/42/9b/721129eeb0a9703e84a6397822d7a9fae3b8441d6845d168575d2c4f00df/django_grappelli_extras-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d63c4ae1b670d3c3a96606adcec9769", "sha256": "cb4ce865875131ce40a1d50e6921d4c4052beb2ad5e9119bf78fc50609bb8a20" }, "downloads": -1, "filename": "django-grappelli-extras-1.1.1.tar.gz", "has_sig": false, "md5_digest": "5d63c4ae1b670d3c3a96606adcec9769", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11733, "upload_time": "2018-11-23T19:42:47", "url": "https://files.pythonhosted.org/packages/72/81/bf5d48028ea4e1603ec35d4cce1a31a75d62ef84fc949c98684ab742e056/django-grappelli-extras-1.1.1.tar.gz" } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "3143d2db7399e0f4978a25aa0d9796b4", "sha256": "96675925d3ca6266e5d2b2b45509ce0fd1a88d74af0e8e8f8757d6b9f74ef876" }, "downloads": -1, "filename": "django-grappelli-extras-1.1.5.tar.gz", "has_sig": false, "md5_digest": "3143d2db7399e0f4978a25aa0d9796b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11863, "upload_time": "2018-11-23T20:00:34", "url": "https://files.pythonhosted.org/packages/42/68/70bbbb4fa585b44af340641dedef0661e25ac5e44d2b49cffb6ed5835bbb/django-grappelli-extras-1.1.5.tar.gz" } ], "1.1.6": [ { "comment_text": "", "digests": { "md5": "6a9291104b082ef10aa9cb71c62b1a85", "sha256": "cd29afc5312599c9ab803449abf05426e4bef63a18c8e8b1f771e77ba0702dae" }, "downloads": -1, "filename": "django-grappelli-extras-1.1.6.tar.gz", "has_sig": false, "md5_digest": "6a9291104b082ef10aa9cb71c62b1a85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12524, "upload_time": "2018-11-24T00:55:37", "url": "https://files.pythonhosted.org/packages/6f/79/0e3c64a5603c37f0815d08876bffc6dfa76ce0908b5c9533602bbb8752a7/django-grappelli-extras-1.1.6.tar.gz" } ], "1.1.7": [ { "comment_text": "", "digests": { "md5": "19c359e62b2ff44bfb89f4280ddf19c3", "sha256": "0c382b49f246c0c185d87547f814dbd4b3bfdd98889be2cc5e3bec81fa42dd96" }, "downloads": -1, "filename": "django-grappelli-extras-1.1.7.tar.gz", "has_sig": false, "md5_digest": "19c359e62b2ff44bfb89f4280ddf19c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12699, "upload_time": "2018-11-28T00:58:52", "url": "https://files.pythonhosted.org/packages/8a/a2/eef826d8892e7650bccd898f77049f425f3818f56349391688c50dfb7de2/django-grappelli-extras-1.1.7.tar.gz" } ], "1.1.8": [ { "comment_text": "", "digests": { "md5": "41d59f8bc16303ac0beab3f6f7c0c91b", "sha256": "a1bdca03555fa79aa00047f68e3f67cd51646b9bfc0677d3b55bd114877ac29a" }, "downloads": -1, "filename": "django-grappelli-extras-1.1.8.tar.gz", "has_sig": false, "md5_digest": "41d59f8bc16303ac0beab3f6f7c0c91b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13485, "upload_time": "2019-07-22T22:38:41", "url": "https://files.pythonhosted.org/packages/35/28/10ec428e16820a5c3865c2f705e6e56b31f0d9b6eac42562d892befc7f0d/django-grappelli-extras-1.1.8.tar.gz" } ], "1.1.9": [ { "comment_text": "", "digests": { "md5": "bde3b5c3e0d1861f93523994b6bff122", "sha256": "e5a3794f629dacae9622349066cfed0f1201c591fdac864a31536ff0e8a2763c" }, "downloads": -1, "filename": "django-grappelli-extras-1.1.9.tar.gz", "has_sig": false, "md5_digest": "bde3b5c3e0d1861f93523994b6bff122", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14015, "upload_time": "2019-08-14T19:22:25", "url": "https://files.pythonhosted.org/packages/7f/16/9f43de05e3f3cb71cfe83347304aaafaf52c78e20704b370493ef4fe294d/django-grappelli-extras-1.1.9.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "1df1745f55fc3edf4063bbd545d98e3a", "sha256": "6f90aa042eb13f5a15d075a970f2e5f14c2db45ad49cdb36edb96a26d39970ba" }, "downloads": -1, "filename": "django-grappelli-extras-1.2.0.tar.gz", "has_sig": false, "md5_digest": "1df1745f55fc3edf4063bbd545d98e3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14053, "upload_time": "2019-08-14T20:56:43", "url": "https://files.pythonhosted.org/packages/44/45/00ffaaea92d28aa6ecac497fcc8a1a43ee95f369d44f4c9b4c564dcd5f41/django-grappelli-extras-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "c35cc1d408d7bbd324cb531e4d8b7ce0", "sha256": "f679cb4696525060040bfa7040e9ff252f8bdaea59b592cc5e789e9b605d5870" }, "downloads": -1, "filename": "django-grappelli-extras-1.2.1.tar.gz", "has_sig": false, "md5_digest": "c35cc1d408d7bbd324cb531e4d8b7ce0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14104, "upload_time": "2019-10-02T03:09:46", "url": "https://files.pythonhosted.org/packages/b0/5a/110055d5d52ceb467fb74203c1365ea63b13ae88048181334a1dca80f5c4/django-grappelli-extras-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c35cc1d408d7bbd324cb531e4d8b7ce0", "sha256": "f679cb4696525060040bfa7040e9ff252f8bdaea59b592cc5e789e9b605d5870" }, "downloads": -1, "filename": "django-grappelli-extras-1.2.1.tar.gz", "has_sig": false, "md5_digest": "c35cc1d408d7bbd324cb531e4d8b7ce0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14104, "upload_time": "2019-10-02T03:09:46", "url": "https://files.pythonhosted.org/packages/b0/5a/110055d5d52ceb467fb74203c1365ea63b13ae88048181334a1dca80f5c4/django-grappelli-extras-1.2.1.tar.gz" } ] }