{ "info": { "author": "David S.", "author_email": "infosmith@protonmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: Django", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "===============\ndj-contentmodel\n===============\n\n\nBoilerplate for taxonomies, content collections, and content models using django-mptt and django-taggit.\n\nFeatures\n--------\n* Drag and drop construction of taxonomies.\n* Arbitrary relationships among groups, taxonomies, collections, content, and attachments.\n* Templates for displaying taxonomies with and without collections' contents.\n\nDocumentation\n-------------\ndj-content model is just boilerplate for django-mptt and django-taggit.\nIt defines a hierarchical structure with arbitrary relationships via collections.\nThe Quickstart example is a sufficient starting point for many projects.\nEach abstract class provided by dj-contentmodel is a descendant of django.db.models, so\nextend them as you would a Django model. The Group and Taxonomy classes are also\ndescendants of django-mptt's MPTTModel class and can be extended accordingly.\nAdditional examples dj-contentmodel's abstract classes are available at https://dj-contentmodel.readthedocs.org.\n\nQuickstart\n----------\nFirst, install dj-contentmodel::\n\n pip install dj-contentmodel\n\nThen, import the abstract base classes.::\n\n from dj_contentmodel.models import Taxonomy, Collection, Content, Attachment\n\nNext, subclass the imported classes to create taxonomies and content models as needed.\nThe following example is of a minimum configuration.\nThe names of defined classes are arbitrary, but the relationships among classes are not.\n::\n\n class Sitemap(Taxonomy):\n \"\"\"Main navigation\"\"\"\n collections = models.ManyToManyField('Bucket', blank=True)\n class Meta:\n verbose_name = \"Category\"\n verbose_name_plural = \"Categories\"\n ...\n\n class Bucket(Collection):\n \"\"\"Arbitrary collections to group content.\"\"\"\n contents = models.ManyToManyField('Page', blank=True)\n ...\n\n class Page(Content):\n ...\n\n class Report(Attachment):\n parents = models.ManyToManyField('Page', blank=True)\n ...\n\nFinally, register your models with the admin.\n::\n\n from django.contrib import admin\n from mptt.admin import DraggableMPTTAdmin\n\n admin.site.register(\n Sitemap,\n DraggableMPTTAdmin,\n list_display=(\n 'tree_actions',\n 'indented_title',),\n list_display_links=(\n 'indented_title',),)\n admin.site.register(Bucket)\n admin.site.register(Page)\n admin.site.register(Report)\n\nWithout a migration, it may be necessary to create the tables.::\n\n python manage.py migrate --run-syncdb\n\n\nRunning Tests\n-------------\n\nDoes the code actually work? For now I have my fingers crossed.\nLater iterations will be test driven and include integration and performance testing.\n::\n\n source /bin/activate\n (myenv) $ pip install -r requirements_test.txt\n (myenv) $ python runtests.py\n\nCredits\n-------\n\nTools used in rendering this package:\n\n* `Cookiecutter`_\n* `cookiecutter-djangopackage`_\n* `django-mptt`_\n* `django-taggit`_\n* `pip-tools`_\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`cookiecutter-djangopackage`: https://github.com/pydanny/cookiecutter-djangopackage\n.. _`django-mptt`: https://github.com/django-mptt/django-mptt\n.. _`django-taggit`: https://github.com/alex/django-taggit\n.. _`pip-tools`: https://github.com/nvie/pip-tools\n\n\n\n\nHistory\n-------\n\n0.1.0 (2016-06-07)\n++++++++++++++++++\n\n* First release on PyPI.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/infosmith/dj-contentmodel", "keywords": "dj-contentmodel", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "dj-contentmodel", "package_url": "https://pypi.org/project/dj-contentmodel/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/dj-contentmodel/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/infosmith/dj-contentmodel" }, "release_url": "https://pypi.org/project/dj-contentmodel/0.1.7/", "requires_dist": null, "requires_python": null, "summary": "Pluggable app for taxonomies, content collections, and navigation.", "version": "0.1.7" }, "last_serial": 2165533, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "54b59c9aa86a958bfdc4625f2a39e1a6", "sha256": "2cf2fd6b7589eec4e18dcdf1308c1c8c79f97d6110ec7b6f0042b395e69a0ace" }, "downloads": -1, "filename": "dj_contentmodel-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "54b59c9aa86a958bfdc4625f2a39e1a6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8049, "upload_time": "2016-06-08T03:58:37", "url": "https://files.pythonhosted.org/packages/e5/ea/49810a68e2c8726585bd6cc2cf2d3465c395f754b8e83ceb12d2275b9551/dj_contentmodel-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4def9ab9b536955714f45d35b18ae0a", "sha256": "4c7c92d60e15238bc61409efe01e554ac2522781b48aaa8038c51e0405e36c10" }, "downloads": -1, "filename": "dj-contentmodel-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b4def9ab9b536955714f45d35b18ae0a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6909, "upload_time": "2016-06-08T03:58:32", "url": "https://files.pythonhosted.org/packages/04/b7/5319dae75f64b7a1c5a93f816020db9080b3acb1bef3f1528e5df2895413/dj-contentmodel-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "619e69d4f3578a45d0dfed955c4b11c8", "sha256": "00b750b43f25b53a21436521db66aa874bf580b994795399d02562a185530722" }, "downloads": -1, "filename": "dj_contentmodel-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "619e69d4f3578a45d0dfed955c4b11c8", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9772, "upload_time": "2016-06-09T06:47:15", "url": "https://files.pythonhosted.org/packages/44/d9/c2c582922c9b9637fbcc8c7686f7ca827368fbc304cae4c3b75d0f5f86e9/dj_contentmodel-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c4bbc9cef97ed7ebdac7e901cf4e494", "sha256": "04c98684f4911a2637fb37c30e982f16402fe877b17cb3a9091dea693722db05" }, "downloads": -1, "filename": "dj-contentmodel-0.1.1.tar.gz", "has_sig": false, "md5_digest": "9c4bbc9cef97ed7ebdac7e901cf4e494", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7388, "upload_time": "2016-06-09T06:47:10", "url": "https://files.pythonhosted.org/packages/60/08/30bee276fe9227ea41e04557cd20d81cb49f5ab458b05c2815ab27fe41f4/dj-contentmodel-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "7824809f96a03f8fbbf961e1bde84547", "sha256": "ea76ffea61e518ef89b7c8e70df33883f71e0b8d4eaa11d5cfd57f1f50fb31b2" }, "downloads": -1, "filename": "dj_contentmodel-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7824809f96a03f8fbbf961e1bde84547", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9772, "upload_time": "2016-06-09T07:04:48", "url": "https://files.pythonhosted.org/packages/a1/e7/0044cabb0e933fa9257fef49d3175738b8446dd5ebe2463e172024e8b660/dj_contentmodel-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "545bf78a4b872b6dd79ff2b61d666b11", "sha256": "7f96dddcd12e62ac3c5422aedf5bc8be983c628add08328821960546e593888c" }, "downloads": -1, "filename": "dj-contentmodel-0.1.2.tar.gz", "has_sig": false, "md5_digest": "545bf78a4b872b6dd79ff2b61d666b11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7393, "upload_time": "2016-06-09T07:04:44", "url": "https://files.pythonhosted.org/packages/6d/44/74a33d7d816519f1001658f1c31eb29b5d73ef054b2320529f7f4074eb7d/dj-contentmodel-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "3d22e2cc79a31190596ecaab062bc070", "sha256": "e1711bae5230da8a09ddd4ef540d2a9eabfc56eac7930d88506a52daadea0677" }, "downloads": -1, "filename": "dj_contentmodel-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3d22e2cc79a31190596ecaab062bc070", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7635, "upload_time": "2016-06-09T08:33:44", "url": "https://files.pythonhosted.org/packages/10/0d/3b043196c4acfe5f2cdde22bc15d6f4fde199f89908fd87d777e6ac9fe69/dj_contentmodel-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "70dfd2388909a8c4735f4b70c735ca16", "sha256": "e3bf49c8af2476490c46c8db313c99c4d0e466845a54facb630b8dc8b4edd0e2" }, "downloads": -1, "filename": "dj-contentmodel-0.1.3.tar.gz", "has_sig": false, "md5_digest": "70dfd2388909a8c4735f4b70c735ca16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7013, "upload_time": "2016-06-09T08:33:38", "url": "https://files.pythonhosted.org/packages/b4/45/ed579083e59101f6a4b98de169a28da5a661201eb7b9b2502ccc2a7fdbf7/dj-contentmodel-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "a191cd4d1400be7d02f27696e18f190b", "sha256": "944d1a29a9bf92f65086fe27444be5da0b82333983590c62aa7ef0e60893ea59" }, "downloads": -1, "filename": "dj_contentmodel-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a191cd4d1400be7d02f27696e18f190b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9760, "upload_time": "2016-06-11T04:02:54", "url": "https://files.pythonhosted.org/packages/93/90/b2175e2d036230a231891fa513dd2926cddad3aebfcb2d1fe1348cc11faf/dj_contentmodel-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54f63b1d9b4d518c52eb465b80b42bc4", "sha256": "338ace7d8b0fa4ee6146a1fab6f87871548787097112fd9f9a9fae9be24deb70" }, "downloads": -1, "filename": "dj-contentmodel-0.1.4.tar.gz", "has_sig": false, "md5_digest": "54f63b1d9b4d518c52eb465b80b42bc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7008, "upload_time": "2016-06-11T04:02:49", "url": "https://files.pythonhosted.org/packages/b5/2c/f918b11509cfe512cb69ced597ccbdceae434e3f77eec4925a0a667ede59/dj-contentmodel-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "467f8365160aa37d9e8819b83a976580", "sha256": "a5400449a99a97ffdf1d7f4de2841c44b4cd2c85877b6a42ab456af4d436d207" }, "downloads": -1, "filename": "dj_contentmodel-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "467f8365160aa37d9e8819b83a976580", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9874, "upload_time": "2016-06-13T17:33:31", "url": "https://files.pythonhosted.org/packages/12/5b/c0d9cb52226f14ae732444c6d949c8cc1bf94228c0c2c49e755d2f7d7f16/dj_contentmodel-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ec015c58c5408808dd05f5f94e065e5", "sha256": "a930c1ad465f98dcc41740e1c5cc3c947636cc8a545a6fa2eb2a3262cb1195a6" }, "downloads": -1, "filename": "dj-contentmodel-0.1.5.tar.gz", "has_sig": false, "md5_digest": "0ec015c58c5408808dd05f5f94e065e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7074, "upload_time": "2016-06-13T17:33:22", "url": "https://files.pythonhosted.org/packages/b9/51/7e0e12e44ecf4910d7d1ff00da6ca5d182f6828a9e797f5b43814f914a72/dj-contentmodel-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "8eae788a6d4eb058114dbdb5a525fe70", "sha256": "012ec2b795b38c97903fcc47c37d6187dfc17f360874ca8c70af99fd52dd5178" }, "downloads": -1, "filename": "dj_contentmodel-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8eae788a6d4eb058114dbdb5a525fe70", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7703, "upload_time": "2016-06-13T20:32:49", "url": "https://files.pythonhosted.org/packages/9f/51/698b595f42ad390893fa2eeb9fb709bd5c7defcff646ceab9ea59e7a8316/dj_contentmodel-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f13c5ed19e0c986227173b84724ffd48", "sha256": "5659bd39f23f36d912f654ee6336a723f259b7467a0da1dfb0cc7bb714802a81" }, "downloads": -1, "filename": "dj-contentmodel-0.1.6.tar.gz", "has_sig": false, "md5_digest": "f13c5ed19e0c986227173b84724ffd48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6873, "upload_time": "2016-06-13T20:32:37", "url": "https://files.pythonhosted.org/packages/c8/09/9c3f66f47e2e36aeb7625f95cdb955b2a6a3eea477fd8914ffedf6b40712/dj-contentmodel-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "3453ce43c8f158b4cd353d7561f244b2", "sha256": "f54d55a26c8deadd03483d7f23db5969842ebddf2fd604ac91397d7d314f0a5b" }, "downloads": -1, "filename": "dj_contentmodel-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3453ce43c8f158b4cd353d7561f244b2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7708, "upload_time": "2016-06-13T23:17:19", "url": "https://files.pythonhosted.org/packages/76/10/1a844c08dfafb05f7cc915d04c19d86694f7a52c3027924aff9cf6825907/dj_contentmodel-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "438181b368d056227ade9a4f6223a626", "sha256": "f4665c9e58e822f57a89653393d7ae7590db5cd7c535e50d8661721673611d6b" }, "downloads": -1, "filename": "dj-contentmodel-0.1.7.tar.gz", "has_sig": false, "md5_digest": "438181b368d056227ade9a4f6223a626", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6882, "upload_time": "2016-06-13T23:17:08", "url": "https://files.pythonhosted.org/packages/66/8d/9f2f5e3c9b46671a251e39a45a06e22f95985c7900232a1e3e3ccf14b50d/dj-contentmodel-0.1.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3453ce43c8f158b4cd353d7561f244b2", "sha256": "f54d55a26c8deadd03483d7f23db5969842ebddf2fd604ac91397d7d314f0a5b" }, "downloads": -1, "filename": "dj_contentmodel-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3453ce43c8f158b4cd353d7561f244b2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7708, "upload_time": "2016-06-13T23:17:19", "url": "https://files.pythonhosted.org/packages/76/10/1a844c08dfafb05f7cc915d04c19d86694f7a52c3027924aff9cf6825907/dj_contentmodel-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "438181b368d056227ade9a4f6223a626", "sha256": "f4665c9e58e822f57a89653393d7ae7590db5cd7c535e50d8661721673611d6b" }, "downloads": -1, "filename": "dj-contentmodel-0.1.7.tar.gz", "has_sig": false, "md5_digest": "438181b368d056227ade9a4f6223a626", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6882, "upload_time": "2016-06-13T23:17:08", "url": "https://files.pythonhosted.org/packages/66/8d/9f2f5e3c9b46671a251e39a45a06e22f95985c7900232a1e3e3ccf14b50d/dj-contentmodel-0.1.7.tar.gz" } ] }