{ "info": { "author": "Andrey Fedoseev", "author_email": "andrey.fedoseev@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Internet :: WWW/HTTP" ], "description": "======================\ndjango-page-components\n======================\n\n\"Page component\" is a unit of a user interface (think ReactJS components). ``django-page-components`` provide\na minimalistic framework for creating page components and using them in your Django views and templates.\n\nTo define a page component you need to create a sub-class of ``page_components.PageComponent``\nand implement ``render`` method like so:\n\n.. code-block:: python\n\n import page_components\n import django.utils.html\n\n\n class AddToCartButton(page_components.PageComponent):\n\n def __init__(self, product):\n self.product = product\n\n class Media:\n js = (\n \"add-to-cart.js\", # this is where addToCart is defined\n )\n css = {\n \"all\": (\n \"add-to-cart.css\" # this is where `.add-to-card` styles are defined\n )\n }\n\n def render(self):\n return django.utils.html.format_html(\n \"\"\"\"\"\",\n product_id=self.product.id\n )\n\n\nYou can also use a ``TemplatePageComponent`` base class to implement page components based on templates.\nIn that case you may want to implement ``get_context_data`` method:\n\n.. code-block:: python\n\n class AddToCartButton(page_components.TemplatePageComponent):\n\n template_name = \"add-to-cart-button.html\"\n\n ...\n\n def get_context_data(self, **kwargs):\n kwargs[\"product_id\"] = self.product_id\n return super(AddToCartButton, self).get_context_data(**kwargs)\n\nNote that it's up to you to decide how to implement the ``render`` method and what additional methods should be added\nto your page components. One general recommendation is to keep the ``__init__`` method as lightweight as possible and do\nall the heavy lifting in the ``render`` method.\n\nA proposed convention is to store your page components classes in ``page_components`` package/module inside your app::\n\n myapp.page_components.AddToCartButton\n\nNow, when we have some page components defined it is time to use them in views:\n\n.. code-block:: python\n\n import django.views.generic\n import page_components\n\n import myapp.models\n import myapp.page_components\n\n class ProductPage(\n page_components.PageComponentsView,\n django.views.generic.DetailView,\n ):\n\n model = myapp.models.Product\n template_name = \"product.html\"\n\n def get_page_components(self):\n return {\n \"add_to_cart_button\": myapp.page_components.AddToCartButton(self.object)\n }\n\n\nand templates:\n\n.. code-block:: html\n\n \n \n /* this will include CSS files for all page components on that page */\n {{ view.media.css.render }}\n \n \n

{{ object.title }}

\n {{ page_components.add_to_cart_button }}\n\n /* this will include JavaScript files for all page components on that page */\n {{ view.media.js.render }}\n \n \n\nNote that page components are placed to ``page_components`` namespace in template context by default. You can change\nthat namespace on per-view basis by adding ``page_components_context_name`` attribute to a view class, or globally with\n``PAGE_COMPONENTS_CONTEXT_NAME`` setting. If you set ``page_components_context_name`` to ``None`` it will disable\nthe namespace entirely.\n\n\n=======\nChanges\n=======\n\n0.1\n===\n\n - Initial release\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/andreyfedoseev/django-page-components", "keywords": "django", "license": "", "maintainer": "", "maintainer_email": "", "name": "django-page-components", "package_url": "https://pypi.org/project/django-page-components/", "platform": "", "project_url": "https://pypi.org/project/django-page-components/", "project_urls": { "Homepage": "https://github.com/andreyfedoseev/django-page-components" }, "release_url": "https://pypi.org/project/django-page-components/0.1/", "requires_dist": null, "requires_python": "", "summary": "Mini-framework for creating re-usable UI components for Django", "version": "0.1" }, "last_serial": 3575648, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "7d83326f9ad7c368b89922d8559f40a3", "sha256": "a9ec0517917c7a8be0671592872cb312c2e3d001a90b2bcc598b350d67f5421d" }, "downloads": -1, "filename": "django-page-components-0.1.tar.gz", "has_sig": false, "md5_digest": "7d83326f9ad7c368b89922d8559f40a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5141, "upload_time": "2018-02-12T17:36:28", "url": "https://files.pythonhosted.org/packages/8e/ff/ec675de66e44a5dac7c5a52695870059125813dd1610c8537af3ec9de0c2/django-page-components-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7d83326f9ad7c368b89922d8559f40a3", "sha256": "a9ec0517917c7a8be0671592872cb312c2e3d001a90b2bcc598b350d67f5421d" }, "downloads": -1, "filename": "django-page-components-0.1.tar.gz", "has_sig": false, "md5_digest": "7d83326f9ad7c368b89922d8559f40a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5141, "upload_time": "2018-02-12T17:36:28", "url": "https://files.pythonhosted.org/packages/8e/ff/ec675de66e44a5dac7c5a52695870059125813dd1610c8537af3ec9de0c2/django-page-components-0.1.tar.gz" } ] }