{ "info": { "author": "Yury Lapshinov", "author_email": "y.raagin@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Django StreamField\n\nThis is a simple realisation of StreamField's idea of Wagtail CMS for plain Django admin or with Grappelli skin.\n\n## Highlights\nYou can build your page with different kind of blocks. \nSort them and sort the lists inside the blocks.\n\nFor editing content inside the blocks, it use native popup mechanism in Django admin interface.\nThis allow you to use other field's widgets inside the blocks as is.\nFor example, if you want to use in your blocks FileBrowseField\nfrom django-filebrowser, it will perfectly working \nwithout any additional settings.\n\nModule also working with [Grappelli Interface](https://github.com/sehmaschine/django-grappelli) (Optional)\n\n![django-streamfield demo screenshot](https://raagin.ru/assets/uploads/django-streamfield.png)\n\n## Contents\n\n- [Installation](#installation)\n- [How to use](#how-to-use)\n- [Admin](#admin)\n - [Custom admin class for block's models](#custom-admin-class-for-blocks-models)\n - [Custom templates for render block models in admin](#custom-templates-for-render-block-models-in-admin)\n - [Override how to render block's fields in admin](#override-how-to-render-blocks-fields-in-admin)\n - [Override list of blocks for your StreamField in admin.py](#override-list-of-blocks-for-your-streamfield-in-adminpy)\n- [Block options](#block-options)\n- [Special cases](#special-cases)\n - [Complex Blocks](#complex-blocks) \n - [Blocks without data in database. Only templates](#blocks-without-data-in-database-only-templates)\n - [Add extra context to blocks](#add-extra-context-to-blocks)\n - [Cache for reduce the number of database requests](#cache-for-reduce-the-number-of-database-requests)\n- [Settings](#settings)\n\n## Installation\n\nRequirements: `django>=2.*`\n\n`pip install django-streamfield`\n\n## How to use\n\n**1. Create new app called `streamblocks`**\n\n**2. Put to `streamblocks/models.py` some models**\n\n...that you want to use in your stream field.\nAnd add this models in STREAMBLOCKS_MODELS list.\nFor example:\n\n```python\n# streamblocks/models.py\n\n# one object\nclass RichText(models.Model):\n text = models.TextField(blank=True, null=True) \n\n class Meta:\n # This will use as name of block in admin\n verbose_name=\"Text\"\n\n# list of objects\nclass ImageWithText(models.Model):\n image = models.ImageField(upload_to=\"folder/\")\n text = models.TextField(null=True, blank=True)\n\n # StreamField option for list of objects\n as_list = True\n\n class Meta:\n verbose_name=\"Images with text\"\n\n# Register blocks for StreamField as list of models\nSTREAMBLOCKS_MODELS = [\n RichText,\n ImageWithText\n]\n```\n\n**3. Create templates for each models above, named as lowercase names of the models:**\n\n1. streamblocks/templates/streamblocks/richtext.html\n2. streamblocks/templates/streamblocks/imagewithtext.html\n\nAnd use `block_content` as context.\n\n> Note: block_content will be single object \nif no 'as_list' property in your model, \nand will be a list of objects if there is.\n\n```html\n\n
\n {{ block_content.text|safe }}\n
\n```\n```html\n\n\n```\n\n**4. Add apps to settings.py**\n\nAdd to INSTALLED_APPS\n\n```python\nINSTALLED_APPS = [\n ...\n 'streamblocks',\n 'streamfield',\n ...\n```\n\n**5. Add streamfield.urls to main urls.py**\n```python\nurlpatterns += [\n path('streamfield/', include('streamfield.urls'))\n]\n```\n\n**6. Add StreamField to your model in your application**\n\nAnd add the models that you want to use in this stream as model_list\n```python\n# models.py\nfrom streamfield.fields import StreamField\nfrom streamblocks.models import RichText, ImageWithText\n\nclass Page(models.Model):\n stream = StreamField(\n model_list=[ \n RichText,\n ImageWithText\n ],\n verbose_name=\"Page blocks\"\n )\n```\n\nThen if you have your 'page' in context, \nyou can get content by field cached property page.stream.render\n```html\n...\n
\n {{ page.stream.render }}\n
\n...\n```\n\nOr, if you need extra context in blocks, you may use template tag:\n```html\n{% load streamfield_tags %}\n...\n
\n {% stream_render page.stream request=request %}\n
\n...\n```\n\n\n## Admin\n### Custom admin class for block's models\nModels will automaticaly register in admin.\nIf you want provide custom admin class, \nfirst unregister models and register again, using `StreamBlocksAdmin` class.\n\n```python\n# streamblocks/admin.py\n\nfrom django.contrib import admin\nfrom streamfield.admin import StreamBlocksAdmin\n\nfrom streamblocks.models import RichText\n\nadmin.site.unregister(RichText)\n@admin.register(RichText)\nclass RichTextBlockAdmin(StreamBlocksAdmin, admin.ModelAdmin):\n pass\n```\n\n### Custom templates for render block models in admin\nIf you need to customize admin templates for block models wich you are using, you need to put templates named as \ndescribed in section 3 (above). but put it inside \"admin\" folder.\n\nFor example for RichText block it will be:\n\n`streamblocks/templates/streamblocks/admin/richtext.html`\n\nAs context use \"form\":\n```html\n{{ form.text.value }}\n```\n### Override how to render block's fields in admin\nCreate custom template for field with name as lowercased field widget name, and put it inside `.../streamblocks/admin/fields/` folder.\n\nFor example for TextField widget (Textarea) of RichText block, it will be:\n\n`streamblocks/templates/streamblocks/admin/fields/textarea.html`\n\nAs context use \"field\":\n```html\n{{ field.value|default:\"\"|safe }}\n```\n\n### Override list of blocks for your StreamField in admin.py\nTypicaly you set the blocks in your models as `model_list` attribute of StreamField field.\nBut if you want to change blocks, for example depending on object, you can do it in admin site\nof your model. Suppose you want to use only `RichText` on page with id=1.\n\n```python\n# admin.py\nfrom streamfield.fields import StreamFieldWidget\nfrom streamblocks.models import RichText\nfrom .models import Page\n\nclass PageAdmin(models.Admin):\n\n def get_form(self, request, obj=None, **kwargs):\n form = super().get_form(request, obj, **kwargs)\n if obj and obj.id == 1:\n form.base_fields['stream'].widget = StreamFieldWidget(attrs={\n 'model_list': [ RichText ]\n })\n return form\n```\nBe careful with already existing blocks in db. If you remove them from admin, it produce error.\n\n## Block options\nYou may use `options` property in your streamblocks models to add some additional options to your block.\nThis is useful with `as_list` property when you need to add some options to whole block not separatly to each object of this list.\n\nFor example:\n```python\n# streamblocks/models.py\n\n# list of objects as slider\nclass Slide(models.Model):\n image = models.ImageField(upload_to=\"folder/\")\n text = models.TextField(null=True, blank=True)\n\n # StreamField option for list of objects\n as_list = True\n\n options = {\n \"autoplay\": {\n \"label\": \"Autoplay slider\",\n \"type\": \"checkbox\",\n \"default\": False\n }\n }\n\n class Meta:\n verbose_name=\"Slide\"\n verbose_name_plural=\"Slider\"\n```\nIn block template you can use this options as `options.autoplay`\nIn page admin you will see it on the bottom of this block.\n> Note: Now only \"checkbox\" type is working.\nYou may apply options for all blocks with `STREAMFIELD_BLOCK_OPTIONS` (See [Settings](#settings))\n\n## Special cases\n### Complex Blocks\nYou may use StreamField as part of blocks and create with that way complex structure\nand use `{{ block_content..render }}`\n\n### Blocks without data in database. Only templates.\nYou may use it for widgets or separators or for whatever you want...\nJust make the block model `abstract`.\n```python\nclass EmptyBlock(models.Model):\n class Meta:\n abstract = True\n verbose_name='Empty space'\n```\nand use `streamblocks/templates/streamblocks/emptyblock.html` for your content.\n> Note: Don't forget to register a block in STREAMBLOCKS_MODELS\n\n### Add extra context to blocks\nSupose, you need to add some data to blocks from global context.\nInstead of using render property in template `{{ page.stream.render }}`,\nyou need to use template tag `stream_render` from `streamfield_tags` with keywords arguments.\n\nFor example, if you have in page template `request` and `page` objects and want to use it in blocks:\n```html\n{% load streamfield_tags %}\n...\n
\n {% stream_render page.stream request=request page=page %}\n
\n...\n```\n\n### Cache for reduce the number of database requests\nThere is two ways of caching:\n- Simple cache view with django cache \n- Create additional field, for example: 'stream_rendered'\nand render to this field html in save method\n\n```python\ndef save(self, *args, **kwargs):\n self.stream_rendered = self.stream.render\n super().save(*args, **kwargs)\n```\n...and use this field in your html\n\n## Settings\n```python\n# settings.py\n```\n### STREAMFIELD_STREAMBLOCKS_APP_PATH \n\nIf your app `streamblocks` located not in project root directory, you need to reflect it in settings.py\n```python\nSTREAMFIELD_STREAMBLOCKS_APP_PATH = 'yourapps.streamblocks'\n```\n\n### STREAMFIELD_BLOCK_OPTIONS\n\nYou may use `STREAMFIELD_BLOCK_OPTIONS` in settings.py to add some options to all blocks.\n\nFor example:\n```python\nSTREAMFIELD_BLOCK_OPTIONS = {\n \"margins\": {\n \"label\": \"Margins\",\n \"type\": \"checkbox\",\n \"default\": True\n }\n}\n```\nIn block template use `{{ options.margins }}`\n\n> Note: Now only \"checkbox\" type is working.\n\n\n\n", "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/raagin/django-streamfield", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "django-streamfield", "package_url": "https://pypi.org/project/django-streamfield/", "platform": "", "project_url": "https://pypi.org/project/django-streamfield/", "project_urls": { "Homepage": "https://github.com/raagin/django-streamfield" }, "release_url": "https://pypi.org/project/django-streamfield/1.1.2/", "requires_dist": null, "requires_python": "", "summary": "StreamField for native Django Admin or with Grappelli", "version": "1.1.2" }, "last_serial": 5953488, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "08ecce56876ae9968c839c1fbb6e7a90", "sha256": "6bd8bae1f5b1637ca252e64cb771bbaa4bf17fbf975c6301669a5b0aec7fad2c" }, "downloads": -1, "filename": "django_streamfield-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "08ecce56876ae9968c839c1fbb6e7a90", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 181072, "upload_time": "2019-04-29T10:03:25", "url": "https://files.pythonhosted.org/packages/37/69/545c29a2d67974b59c6969148a79e189c0a9683dc916ad0bec577af45648/django_streamfield-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83e0c9ca97c020ec0c9a3f283eec0a5b", "sha256": "e2a2c57cf19f649f807d5ff3e31859667b9a71cfc9cbe46ff3ca10002181eac7" }, "downloads": -1, "filename": "django-streamfield-1.0.0.tar.gz", "has_sig": false, "md5_digest": "83e0c9ca97c020ec0c9a3f283eec0a5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 171138, "upload_time": "2019-04-29T10:03:47", "url": "https://files.pythonhosted.org/packages/3e/e5/a9c607f36492cdaa5f1f5f5ccfb8fb9165e158e0f59df92b07902b28d2fb/django-streamfield-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "66f01bc238a489cd2ea37a767c311d50", "sha256": "85e9b7644cba66e6551055cafa64a1165853b8f9a244ee2dd2b80c4aea1fda59" }, "downloads": -1, "filename": "django_streamfield-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "66f01bc238a489cd2ea37a767c311d50", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 181074, "upload_time": "2019-04-29T13:18:25", "url": "https://files.pythonhosted.org/packages/b6/9d/30736b4393c3b1fa5b9b1380271ad7c7f8071fa6cbb1d27c530bd234a19f/django_streamfield-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "03f5879fcf495a77314eb1a647bca296", "sha256": "07be1305402ef46498969e7a9a52bec61588a70f20b396d874452ca6c3d20bff" }, "downloads": -1, "filename": "django-streamfield-1.0.1.tar.gz", "has_sig": false, "md5_digest": "03f5879fcf495a77314eb1a647bca296", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 171133, "upload_time": "2019-04-29T13:18:45", "url": "https://files.pythonhosted.org/packages/9a/37/4138c84524d0e3755f7511d5e4174b9d243e60250186827ebd545722d0b6/django-streamfield-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "0b7704693d45bd7e9894034afcf8d2e1", "sha256": "3580c874a38ba2b4adfe654672c8d4659ab5b0603be0b65e642e0b9847161ae7" }, "downloads": -1, "filename": "django_streamfield-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0b7704693d45bd7e9894034afcf8d2e1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 182001, "upload_time": "2019-04-29T14:34:27", "url": "https://files.pythonhosted.org/packages/12/6f/a582fa3945c30a618f5f32d66c775440bcbf8d831e74dbc1f8e548253978/django_streamfield-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "faf9a729acd84a2f3a4193d0dffd0899", "sha256": "7cf9ab00455bcda24fdee34fdaf1f68493c8c9a785ff23f629a6da592bb22c3e" }, "downloads": -1, "filename": "django-streamfield-1.0.2.tar.gz", "has_sig": false, "md5_digest": "faf9a729acd84a2f3a4193d0dffd0899", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 171652, "upload_time": "2019-04-29T14:34:36", "url": "https://files.pythonhosted.org/packages/14/fc/09ea45f15bb3e3577474dfb3dc401c676a9fa936336da9a9b05e2779e19c/django-streamfield-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "480faffec0aef1a2582de0ef84ff9da4", "sha256": "c43078de0fa3fd5b47156a52f8f45ff53ae359b790caa374de673614f7ba094e" }, "downloads": -1, "filename": "django_streamfield-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "480faffec0aef1a2582de0ef84ff9da4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 186441, "upload_time": "2019-04-30T20:46:08", "url": "https://files.pythonhosted.org/packages/36/6c/7238642e74308dc12e4847d6cf33f2b6675437ff5fc8d2ab709c6b579b60/django_streamfield-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07ad7d09e1661a0979041a6e0df603ef", "sha256": "8ca512c4622ae07c82640cb0bff730d2ccff3b4b141e4226907f5d7ab3ba3cfd" }, "downloads": -1, "filename": "django-streamfield-1.0.3.tar.gz", "has_sig": false, "md5_digest": "07ad7d09e1661a0979041a6e0df603ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 171852, "upload_time": "2019-04-30T20:46:13", "url": "https://files.pythonhosted.org/packages/11/8c/6d4f99c0e11b5930a3904cc8cacc5fdc1522f2e4c49cfb6342e62c5fae3d/django-streamfield-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "10b4eee48d5d0c0028efa6e1ca587c4d", "sha256": "4f93083bc2d967499a6548ff35f07619ebaead28fbc9e6c9bd83f25fcf2ceaa3" }, "downloads": -1, "filename": "django_streamfield-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "10b4eee48d5d0c0028efa6e1ca587c4d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 188552, "upload_time": "2019-05-01T22:32:44", "url": "https://files.pythonhosted.org/packages/69/14/6cbe7bba7527ce1aabed1d10905f3c5c5f202808a57258081c94c9628de6/django_streamfield-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac8b787d53640c626a9ae56e0aecd7d4", "sha256": "10fed88570168d1c34bde38e936b453da1b1fafc9ff50bb216e0bcc43f42b876" }, "downloads": -1, "filename": "django-streamfield-1.0.4.tar.gz", "has_sig": false, "md5_digest": "ac8b787d53640c626a9ae56e0aecd7d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 173873, "upload_time": "2019-05-01T22:32:46", "url": "https://files.pythonhosted.org/packages/45/73/7b9f908d00ba9c5d0691a8554f0bff5bad359a54a9a51f40ec1ef180c9c1/django-streamfield-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "6735c1d3e8b1805a1a6c4fc3deb8a64a", "sha256": "f7362b39ef0eaae6cd109ded8c91a980fdb41ed8e87a80d4810d9b5e5f963a27" }, "downloads": -1, "filename": "django_streamfield-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "6735c1d3e8b1805a1a6c4fc3deb8a64a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 189106, "upload_time": "2019-07-14T14:43:11", "url": "https://files.pythonhosted.org/packages/4d/83/6713170e7bbce6efa49d148b1c7e3609a933d6633b53d9659a565de4c5a2/django_streamfield-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24bb42b9dc9ef5a5826a183addaa8d13", "sha256": "18f05fd640b60c1333307312a1d25cf8469ccd21faa2342ef357768e845568f2" }, "downloads": -1, "filename": "django-streamfield-1.0.5.tar.gz", "has_sig": false, "md5_digest": "24bb42b9dc9ef5a5826a183addaa8d13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 174439, "upload_time": "2019-07-14T14:43:15", "url": "https://files.pythonhosted.org/packages/3f/0e/840d52194167883441f54e824d3c0f85f44f5d04a91d9d006f49f6f7323f/django-streamfield-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "650ada302bcdfa959af0275d5eae73b2", "sha256": "1679209dd7ddefcd552c18f714173a585aa9aae808e94ece28b7a2bcf157069f" }, "downloads": -1, "filename": "django-streamfield-1.0.6.tar.gz", "has_sig": false, "md5_digest": "650ada302bcdfa959af0275d5eae73b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178075, "upload_time": "2019-08-09T17:52:15", "url": "https://files.pythonhosted.org/packages/c1/a5/9656fdcf0d9a9a377863942c560b785e284e4a2e951fbd3da0ee8a16862b/django-streamfield-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "fdb63007e55cace33df8cabb9a001435", "sha256": "1efaa8a4c7db114cb519836879950e715d2f1ec8c9f492392f381dfa730c5b7f" }, "downloads": -1, "filename": "django_streamfield-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "fdb63007e55cace33df8cabb9a001435", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 188247, "upload_time": "2019-08-12T16:21:41", "url": "https://files.pythonhosted.org/packages/44/47/9c1410f4958456ea15b9cc8c5a154047561fe6d0e6aca40199dc61d75e11/django_streamfield-1.0.7-py3-none-any.whl" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "6dd71e8647d79dc7f3d16ff786085e1c", "sha256": "a392b570dbcec54fa722afe6836a8a8dc567819d788b115c9ef5694aed81910e" }, "downloads": -1, "filename": "django-streamfield-1.0.8.tar.gz", "has_sig": false, "md5_digest": "6dd71e8647d79dc7f3d16ff786085e1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 177195, "upload_time": "2019-08-15T15:56:25", "url": "https://files.pythonhosted.org/packages/06/2a/f09822387d14e8f4ab61504b58eae3fb492a5b24302b1f2ec82d8055f949/django-streamfield-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "aeb865d069ac27a0697f36d776a9a502", "sha256": "c27b3d6f6060246f482332213ab3936efa66b45f4be3807cca14a0d7a027d47f" }, "downloads": -1, "filename": "django-streamfield-1.0.9.tar.gz", "has_sig": false, "md5_digest": "aeb865d069ac27a0697f36d776a9a502", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 177423, "upload_time": "2019-08-24T11:06:44", "url": "https://files.pythonhosted.org/packages/5b/93/3371bfc64fa76ca52bad566102a672eaff06f95ca9735d46432ecab0a352/django-streamfield-1.0.9.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "85f9c331c388e2f08e1cfde17d4d00ff", "sha256": "e8dc255153c025a00395b6faf3776d48d04a8a70c23b47d09dc33ccfc07ec64f" }, "downloads": -1, "filename": "django_streamfield-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "85f9c331c388e2f08e1cfde17d4d00ff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 189148, "upload_time": "2019-09-06T07:22:39", "url": "https://files.pythonhosted.org/packages/5c/ed/66130392034397b670122ca42f421164b6b140126a7a06464c26e578e8e1/django_streamfield-1.1.0-py3-none-any.whl" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "eef88a7726615e345ea69a0aa1a1839a", "sha256": "9c8028846cef26e854043ad0b6cbd6c7a3bcf959be37f0895d71af3fc7604206" }, "downloads": -1, "filename": "django_streamfield-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "eef88a7726615e345ea69a0aa1a1839a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 189158, "upload_time": "2019-09-06T08:06:03", "url": "https://files.pythonhosted.org/packages/8e/3e/cd5f5f20611bc463874e42e18af8e637ee5e9f1a174dd05fa0a67fdfb337/django_streamfield-1.1.1-py3-none-any.whl" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "54c09391434f36382869f9eca3a20543", "sha256": "41a1d4704bf566cb607dd1ef2742dec4be3f99ceabaacf9a09d077ae8bbd020d" }, "downloads": -1, "filename": "django_streamfield-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "54c09391434f36382869f9eca3a20543", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 188702, "upload_time": "2019-10-10T07:41:02", "url": "https://files.pythonhosted.org/packages/0b/f6/6d4fc9da875e57e55c8854ff7d1f6c8a7c6a178a1e0a3a6ecdf5f00127da/django_streamfield-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83135d27d3ef7c85985c6aaaf83227c0", "sha256": "2942b43c9fef1d1053ea9f656d850398446c12e8d7df2795cdbbe2137e96f9df" }, "downloads": -1, "filename": "django-streamfield-1.1.2.tar.gz", "has_sig": false, "md5_digest": "83135d27d3ef7c85985c6aaaf83227c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 177867, "upload_time": "2019-10-10T07:41:05", "url": "https://files.pythonhosted.org/packages/ae/d0/a1f542e9f500e550d16224ef5254d86b84d79daf2e80dcce6a47d4001fbc/django-streamfield-1.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "54c09391434f36382869f9eca3a20543", "sha256": "41a1d4704bf566cb607dd1ef2742dec4be3f99ceabaacf9a09d077ae8bbd020d" }, "downloads": -1, "filename": "django_streamfield-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "54c09391434f36382869f9eca3a20543", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 188702, "upload_time": "2019-10-10T07:41:02", "url": "https://files.pythonhosted.org/packages/0b/f6/6d4fc9da875e57e55c8854ff7d1f6c8a7c6a178a1e0a3a6ecdf5f00127da/django_streamfield-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83135d27d3ef7c85985c6aaaf83227c0", "sha256": "2942b43c9fef1d1053ea9f656d850398446c12e8d7df2795cdbbe2137e96f9df" }, "downloads": -1, "filename": "django-streamfield-1.1.2.tar.gz", "has_sig": false, "md5_digest": "83135d27d3ef7c85985c6aaaf83227c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 177867, "upload_time": "2019-10-10T07:41:05", "url": "https://files.pythonhosted.org/packages/ae/d0/a1f542e9f500e550d16224ef5254d86b84d79daf2e80dcce6a47d4001fbc/django-streamfield-1.1.2.tar.gz" } ] }