django-fluent-blogs
===================
.. image:: https://github.com/django-fluent/django-fluent-blogs/actions/workflows/tests.yaml/badge.svg?branch=master
:target: https://github.com/django-fluent/django-fluent-blogs/actions/workflows/tests.yaml
.. image:: https://img.shields.io/pypi/v/django-fluent-blogs.svg
:target: https://pypi.python.org/pypi/django-fluent-blogs/
.. image:: https://img.shields.io/pypi/l/django-fluent-blogs.svg
:target: https://pypi.python.org/pypi/django-fluent-blogs/
.. image:: https://img.shields.io/codecov/c/github/django-fluent/django-fluent-blogs/master.svg
:target: https://codecov.io/github/django-fluent/django-fluent-blogs?branch=master
This is a basic blogging engine, with the following features:
* Archive views by date, author, category and tags.
* Contents filled by django-fluent-contents_
* RSS and Atom feeds
* Granularity in templates to override layouts.
* Abstract base model for custom blog models.
Used applications:
* Categories based on django-categories-i18n_ (or django-categories_).
* *Optional* comments based on django-contrib-comments_
* *Optional* multilingual support based on django-parler_.
* *Optional* integration with django-taggit_ and django-taggit-autocomplete-modified_ for tag support
* *Optional* integration with django-fluent-comments_ for Ajax-based comments
* *Optional* integration with django-fluent-pages_
* *Optional* integration with django.contrib.sitemaps_
TODO:
* Have integration with blog publication protocols (like django-blog-zinnia_ provides), built in a similar way like django.contrib.syndication_ works.
Installation
============
First install the module, preferably in a virtual environment:
.. code-block:: bash
pip install django-fluent-blogs
# Install the plugins of fluent-contents that you use:
pip install django-fluent-contents[text]
# Optional: to add tagging support + autocomplete use:
pip install django-taggit django-taggit-autocomplete-modified
Configuration
-------------
Add the applications to ``settings.py``:
.. code-block:: python
INSTALLED_APPS += (
# Blog engine
'fluent_blogs',
# The content plugins
'fluent_contents',
'fluent_contents.plugins.text',
# Support libs
'categories_i18n',
'django_wysiwyg',
'slug_preview',
# Optional commenting support
'django_comments',
# Optional tagging
'taggit',
'taggit_autocomplete_modified',
)
DJANGO_WYSIWYG_FLAVOR = "yui_advanced"
Note that not all applications are required;
tagging is optional, and so are the various ``fluent_contents.plugin.*`` packages.
Include the apps in ``urls.py``:
.. code-block:: python
urlpatterns += patterns('',
url(r'^admin/util/taggit_autocomplete_modified/', include('taggit_autocomplete_modified.urls')),
url(r'^blog/comments/', include('django_comments.urls')),
url(r'^blog/', include('fluent_blogs.urls')),
)
The database can be created afterwards::
./manage.py migrate
In case additional plugins of django-fluent-contents_ are used, follow their
`installation instructions <http://django-fluent-contents.readthedocs.org/en/latest/plugins/index.html>`_ as well.
Typically this includes:
* adding the package name to ``INSTALLED_APPS``.
* running ``pip install django-fluent-contents[pluginname]``
* running ``./manage.py syncdb``
Configuring the templates
-------------------------
To display the blog contents, a ``fluent_blogs/base.html`` file needs to be created.
This will be used to map the output of the module to your site templates.
The base template needs to have the blocks:
* ``content`` - displays the main content
* ``title`` - the ``<head>`` title fragment.
* ``link`` - displays ``<link>`` tags for RSS feeds.
* ``script`` - includes additional ``<script>`` tags.
* ``meta-description`` - the ``value`` of the meta-description tag.
* ``meta-keywords`` - the ``value`` for the meta-keywords tag.
* ``og-type`` - the OpenGraph type for Facebook (optional)
* ``og-description`` the OpenGraph description for Facebook (optional)
The ``fluent_blogs/base.html`` template could simply remap the block names to the site's ``base.html`` template.
For example:
.. code-block:: html+django
{% extends "base.html" %}
{% block headtitle %}{% block title %}{% endblock %}{% endblock %}
{% block main %}
{# This area is filled with the blog archive/details:
{% block content %}{% endblock %}
{# Add any common layout, e.g. a sidebar here #}
{% endblock %}
When all other block names are already available in the site's ``base.html`` template,
this example should be sufficient.
The filename of the base template can also be changed by defining the ``FLUENT_BLOGS_BASE_TEMPLATE`` setting.
Comments
~~~~~~~~
The commenting support can be based on django-contrib-comments_, or any other system of your choice.
To integrate django-contrib-comments_ with your site theme, also create a ``comments/base.html`` template that maps the blocks:
* ``title``
* ``content``
* ``extrahead`` (only for django-fluent-comments_)
Adding pages to the sitemap
---------------------------
Optionally, the blog pages can be included in the sitemap.
Add the following in ``urls.py``:
.. code-block:: python
from fluent_blogs.sitemaps import EntrySitemap, CategoryArchiveSitemap, AuthorArchiveSitemap, TagArchiveSitemap
sitemaps = {
'blog_entries': EntrySitemap,
'blog_categories': CategoryArchiveSitemap,
'blog_authors': AuthorArchiveSitemap,
'blog_tags': TagArchiveSitemap,
}
urlpatterns += patterns('',
url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
)
Integration with django-fluent-pages:
-------------------------------------
To integrate with the page types of django-fluent-pages_, don't include ``fluent_blogs.urls`` in the URLconf:
.. code-block:: python
urlpatterns += patterns('',
url(r'^admin/util/taggit_autocomplete_modified/', include('taggit_autocomplete_modified.urls')),
url(r'^blog/comments/', include('django_comments.urls')), # or fluent_comments.urls
)
Instead, add a page type instead:
.. code-block:: python
INSTALLED_APPS += (
'fluent_pages',
'fluent_blogs.pagetypes.blogpage',
)
A "Blog" page can now be created in the page tree of django-fluent-pages_
at the desired URL path.
Integration with django-fluent-comments:
----------------------------------------
To use Ajax-based commenting features of django-fluent-comments_, include it in ``settings.py``:
.. code-block:: python
INSTALLED_APPS += (
'fluent_blogs',
'fluent_comments', # Before django_comments
'django_comments',
...
)
Include the proper module in ``urls.py``:
.. code-block:: python
urlpatterns += patterns('',
url(r'^blog/comments/', include('fluent_comments.urls')),
...
)
This module will detect the installation, and enable the moderation features and include
the required CSS and JavaScript files to have a Ajax-based commenting system.
Integration with other commenting systems
-----------------------------------------
To use a different commenting system instead of django-contrib-comments_ (e.g. DISQUS_ or Facebook-comments_), override the following templates:
* ``fluent_blogs/entry_detail/comments.html``
These CSS/JavaScript includes are generated using:
* ``fluent_blogs/entry_detail/comments_css.html``
* ``fluent_blogs/entry_detail/comments_script.html``
Overriding the blog layout
--------------------------
To change the layout of the blog , the following templates can be overwritten:
In the archive/list page:
* ``fluent_blogs/entry_archive.html`` - the starting point, which includes all sub templates:
* ``fluent_blogs/entry_archive/item.html`` - a single list item (extends ``fluent_blogs/entry_contents_base.html``).
* ``fluent_blogs/entry_archive/empty.html`` - the default message when there are no entries.
* ``fluent_blogs/entry_archive/pagination.html`` - the pagination at the bottom of the page.
In the detail page:
* ``fluent_blogs/entry_detail.html`` - the starting point, which includes all sub templates:
* ``fluent_blogs/entry_detail/contents.html`` - the entry contents (extends ``fluent_blogs/entry_contents_base.html``).
* ``fluent_blogs/entry_detail/widgets.html`` - space to add Social Media buttons.
* ``fluent_blogs/entry_detail/comments.html`` - the comments.
* ``fluent_blogs/entry_detail/navigation.html`` - the entry navigation links
* ``fluent_blogs/entry_detail/page_footer.html`` - space below the comments to add Social Media buttons.
* ``fluent_blogs/entry_detail/comments_css.html``
* ``fluent_blogs/entry_detail/comments_script.html``
Common appearance:
* ``fluent_blogs/entry_contents_base.html`` - the common appearance of entries in the archive and detail page.
* ``fluent_blogs/base.html`` - the base template, e.g. to introduce a common sidebar.
Shared entry layout
~~~~~~~~~~~~~~~~~~~
When the layout of individual entries is shared with
* By default, the contents ``fluent_blogs/entry_archive/item.html`` and , based on ``fluent_blogs/entry_archive/item.html`` by default
Custom entry models
-------------------
This applications supports the use of custom models for the blog entries.
Include the following setting in your project:
.. code-block:: python
FLUENT_BLOGS_ENTRY_MODEL = 'myapp.ModelName'
This application will use the custom model for feeds, views and the sitemap.
The model can either inherit from the following classes:
* ``fluent_blogs.models.Entry`` (the default entry)
* ``fluent_blogs.base_models.AbstractEntry`` (the default entry, as abstract model)
* A mix of ``fluent_blogs.base_models.AbstractEntryBase`` combined with:
* ``fluent_blogs.base_models.ExcerptEntryMixin``
* ``fluent_blogs.base_models.ContentsEntryMixin``
* ``fluent_blogs.base_models.CommentsEntryMixin``
* ``fluent_blogs.base_models.CategoriesEntryMixin``
* ``fluent_blogs.base_models.TagsEntryMixin``
When a custom model is used, the admin needs to be registered manually.
The admin can inherit from either:
* ``fluent_blogs.admin.AbstractEntryBaseAdmin``
* ``fluent_blogs.admin.EntryAdmin``
The views are still rendered using the same templates, but you can also override:
* ``myapp/modelname_archive_*.html``
* ``myapp/modelname_detail.html``
* ``myapp/modelname_feed_description.html``
Contributing
------------
This module is designed to be generic, and easy to plug into your site.
In case there is anything you didn't like about it, or think it's not
flexible enough, please let us know. We'd love to improve it!
If you have any other valuable contribution, suggestion or idea,
please let us know as well because we will look into it.
Pull requests are welcome too. :-)
.. _DISQUS: http://disqus.com/
.. _django-blog-zinnia: http://django-blog-zinnia.com/documentation/
.. _django.contrib.syndication: https://docs.djangoproject.com/en/dev/ref/contrib/syndication/
.. _django-contrib-comments: https://django-contrib-comments.readthedocs.io/
.. _django.contrib.sitemaps: https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/
.. _django-categories: https://github.com/callowayproject/django-categories
.. _django-categories-i18n: https://github.com/django-parler/django-categories-i18n
.. _django-fluent-comments: https://github.com/django-fluent/django-fluent-comments
.. _django-fluent-contents: https://github.com/django-fluent/django-fluent-contents
.. _django-fluent-pages: https://github.com/django-fluent/django-fluent-pages
.. _django-parler: https://github.com/django-parler/django-parler
.. _django-polymorphic: https://github.com/bconstantin/django_polymorphic
.. _django-taggit: https://github.com/alex/django-taggit
.. _django-taggit-autocomplete-modified: http://packages.python.org/django-taggit-autocomplete-modified/
.. _Facebook-comments: https://developers.facebook.com/docs/reference/plugins/comments/
Raw data
{
"_id": null,
"home_page": "https://github.com/edoburu/django-fluent-blogs",
"name": "django-fluent-blogs",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Diederik van der Boor",
"author_email": "opensource@edoburu.nl",
"download_url": "https://files.pythonhosted.org/packages/8b/b3/ef234c127f7ef45d7217066ecdefd8c96277417204a8ede0061b3f5c5018/django-fluent-blogs-3.1.tar.gz",
"platform": null,
"description": "django-fluent-blogs\n===================\n\n.. image:: https://github.com/django-fluent/django-fluent-blogs/actions/workflows/tests.yaml/badge.svg?branch=master\n :target: https://github.com/django-fluent/django-fluent-blogs/actions/workflows/tests.yaml\n.. image:: https://img.shields.io/pypi/v/django-fluent-blogs.svg\n :target: https://pypi.python.org/pypi/django-fluent-blogs/\n.. image:: https://img.shields.io/pypi/l/django-fluent-blogs.svg\n :target: https://pypi.python.org/pypi/django-fluent-blogs/\n.. image:: https://img.shields.io/codecov/c/github/django-fluent/django-fluent-blogs/master.svg\n :target: https://codecov.io/github/django-fluent/django-fluent-blogs?branch=master\n\nThis is a basic blogging engine, with the following features:\n\n* Archive views by date, author, category and tags.\n* Contents filled by django-fluent-contents_\n* RSS and Atom feeds\n* Granularity in templates to override layouts.\n* Abstract base model for custom blog models.\n\nUsed applications:\n\n* Categories based on django-categories-i18n_ (or django-categories_).\n* *Optional* comments based on django-contrib-comments_\n* *Optional* multilingual support based on django-parler_.\n* *Optional* integration with django-taggit_ and django-taggit-autocomplete-modified_ for tag support\n* *Optional* integration with django-fluent-comments_ for Ajax-based comments\n* *Optional* integration with django-fluent-pages_\n* *Optional* integration with django.contrib.sitemaps_\n\nTODO:\n\n* Have integration with blog publication protocols (like django-blog-zinnia_ provides), built in a similar way like django.contrib.syndication_ works.\n\n\nInstallation\n============\n\nFirst install the module, preferably in a virtual environment:\n\n.. code-block:: bash\n\n pip install django-fluent-blogs\n\n # Install the plugins of fluent-contents that you use:\n pip install django-fluent-contents[text]\n\n # Optional: to add tagging support + autocomplete use:\n pip install django-taggit django-taggit-autocomplete-modified\n\n\nConfiguration\n-------------\n\nAdd the applications to ``settings.py``:\n\n.. code-block:: python\n\n INSTALLED_APPS += (\n # Blog engine\n 'fluent_blogs',\n\n # The content plugins\n 'fluent_contents',\n 'fluent_contents.plugins.text',\n\n # Support libs\n 'categories_i18n',\n 'django_wysiwyg',\n 'slug_preview',\n\n # Optional commenting support\n 'django_comments',\n\n # Optional tagging\n 'taggit',\n 'taggit_autocomplete_modified',\n )\n\n DJANGO_WYSIWYG_FLAVOR = \"yui_advanced\"\n\nNote that not all applications are required;\ntagging is optional, and so are the various ``fluent_contents.plugin.*`` packages.\n\nInclude the apps in ``urls.py``:\n\n.. code-block:: python\n\n urlpatterns += patterns('',\n url(r'^admin/util/taggit_autocomplete_modified/', include('taggit_autocomplete_modified.urls')),\n url(r'^blog/comments/', include('django_comments.urls')),\n url(r'^blog/', include('fluent_blogs.urls')),\n )\n\nThe database can be created afterwards::\n\n ./manage.py migrate\n\nIn case additional plugins of django-fluent-contents_ are used, follow their\n`installation instructions <http://django-fluent-contents.readthedocs.org/en/latest/plugins/index.html>`_ as well.\nTypically this includes:\n\n* adding the package name to ``INSTALLED_APPS``.\n* running ``pip install django-fluent-contents[pluginname]``\n* running ``./manage.py syncdb``\n\n\nConfiguring the templates\n-------------------------\n\nTo display the blog contents, a ``fluent_blogs/base.html`` file needs to be created.\nThis will be used to map the output of the module to your site templates.\n\nThe base template needs to have the blocks:\n\n* ``content`` - displays the main content\n* ``title`` - the ``<head>`` title fragment.\n* ``link`` - displays ``<link>`` tags for RSS feeds.\n* ``script`` - includes additional ``<script>`` tags.\n* ``meta-description`` - the ``value`` of the meta-description tag.\n* ``meta-keywords`` - the ``value`` for the meta-keywords tag.\n* ``og-type`` - the OpenGraph type for Facebook (optional)\n* ``og-description`` the OpenGraph description for Facebook (optional)\n\nThe ``fluent_blogs/base.html`` template could simply remap the block names to the site's ``base.html`` template.\nFor example:\n\n.. code-block:: html+django\n\n {% extends \"base.html\" %}\n\n {% block headtitle %}{% block title %}{% endblock %}{% endblock %}\n\n {% block main %}\n {# This area is filled with the blog archive/details:\n {% block content %}{% endblock %}\n\n {# Add any common layout, e.g. a sidebar here #}\n {% endblock %}\n\nWhen all other block names are already available in the site's ``base.html`` template,\nthis example should be sufficient.\n\nThe filename of the base template can also be changed by defining the ``FLUENT_BLOGS_BASE_TEMPLATE`` setting.\n\nComments\n~~~~~~~~\n\nThe commenting support can be based on django-contrib-comments_, or any other system of your choice.\nTo integrate django-contrib-comments_ with your site theme, also create a ``comments/base.html`` template that maps the blocks:\n\n* ``title``\n* ``content``\n* ``extrahead`` (only for django-fluent-comments_)\n\n\nAdding pages to the sitemap\n---------------------------\n\nOptionally, the blog pages can be included in the sitemap.\nAdd the following in ``urls.py``:\n\n.. code-block:: python\n\n from fluent_blogs.sitemaps import EntrySitemap, CategoryArchiveSitemap, AuthorArchiveSitemap, TagArchiveSitemap\n\n sitemaps = {\n 'blog_entries': EntrySitemap,\n 'blog_categories': CategoryArchiveSitemap,\n 'blog_authors': AuthorArchiveSitemap,\n 'blog_tags': TagArchiveSitemap,\n }\n\n urlpatterns += patterns('',\n url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),\n )\n\n\nIntegration with django-fluent-pages:\n-------------------------------------\n\nTo integrate with the page types of django-fluent-pages_, don't include ``fluent_blogs.urls`` in the URLconf:\n\n.. code-block:: python\n\n urlpatterns += patterns('',\n url(r'^admin/util/taggit_autocomplete_modified/', include('taggit_autocomplete_modified.urls')),\n url(r'^blog/comments/', include('django_comments.urls')), # or fluent_comments.urls\n )\n\nInstead, add a page type instead:\n\n.. code-block:: python\n\n INSTALLED_APPS += (\n 'fluent_pages',\n 'fluent_blogs.pagetypes.blogpage',\n )\n\nA \"Blog\" page can now be created in the page tree of django-fluent-pages_\nat the desired URL path.\n\n\nIntegration with django-fluent-comments:\n----------------------------------------\n\nTo use Ajax-based commenting features of django-fluent-comments_, include it in ``settings.py``:\n\n.. code-block:: python\n\n INSTALLED_APPS += (\n 'fluent_blogs',\n 'fluent_comments', # Before django_comments\n 'django_comments',\n\n ...\n )\n\nInclude the proper module in ``urls.py``:\n\n.. code-block:: python\n\n urlpatterns += patterns('',\n url(r'^blog/comments/', include('fluent_comments.urls')),\n\n ...\n )\n\nThis module will detect the installation, and enable the moderation features and include\nthe required CSS and JavaScript files to have a Ajax-based commenting system.\n\n\nIntegration with other commenting systems\n-----------------------------------------\n\nTo use a different commenting system instead of django-contrib-comments_ (e.g. DISQUS_ or Facebook-comments_), override the following templates:\n\n* ``fluent_blogs/entry_detail/comments.html``\n\nThese CSS/JavaScript includes are generated using:\n\n* ``fluent_blogs/entry_detail/comments_css.html``\n* ``fluent_blogs/entry_detail/comments_script.html``\n\n\nOverriding the blog layout\n--------------------------\n\nTo change the layout of the blog , the following templates can be overwritten:\n\nIn the archive/list page:\n\n* ``fluent_blogs/entry_archive.html`` - the starting point, which includes all sub templates:\n* ``fluent_blogs/entry_archive/item.html`` - a single list item (extends ``fluent_blogs/entry_contents_base.html``).\n* ``fluent_blogs/entry_archive/empty.html`` - the default message when there are no entries.\n* ``fluent_blogs/entry_archive/pagination.html`` - the pagination at the bottom of the page.\n\nIn the detail page:\n\n* ``fluent_blogs/entry_detail.html`` - the starting point, which includes all sub templates:\n* ``fluent_blogs/entry_detail/contents.html`` - the entry contents (extends ``fluent_blogs/entry_contents_base.html``).\n* ``fluent_blogs/entry_detail/widgets.html`` - space to add Social Media buttons.\n* ``fluent_blogs/entry_detail/comments.html`` - the comments.\n* ``fluent_blogs/entry_detail/navigation.html`` - the entry navigation links\n* ``fluent_blogs/entry_detail/page_footer.html`` - space below the comments to add Social Media buttons.\n* ``fluent_blogs/entry_detail/comments_css.html``\n* ``fluent_blogs/entry_detail/comments_script.html``\n\nCommon appearance:\n\n* ``fluent_blogs/entry_contents_base.html`` - the common appearance of entries in the archive and detail page.\n* ``fluent_blogs/base.html`` - the base template, e.g. to introduce a common sidebar.\n\n\nShared entry layout\n~~~~~~~~~~~~~~~~~~~\n\nWhen the layout of individual entries is shared with\n\n* By default, the contents ``fluent_blogs/entry_archive/item.html`` and , based on ``fluent_blogs/entry_archive/item.html`` by default\n\n\nCustom entry models\n-------------------\n\nThis applications supports the use of custom models for the blog entries.\nInclude the following setting in your project:\n\n.. code-block:: python\n\n FLUENT_BLOGS_ENTRY_MODEL = 'myapp.ModelName'\n\nThis application will use the custom model for feeds, views and the sitemap.\nThe model can either inherit from the following classes:\n\n* ``fluent_blogs.models.Entry`` (the default entry)\n* ``fluent_blogs.base_models.AbstractEntry`` (the default entry, as abstract model)\n* A mix of ``fluent_blogs.base_models.AbstractEntryBase`` combined with:\n\n * ``fluent_blogs.base_models.ExcerptEntryMixin``\n * ``fluent_blogs.base_models.ContentsEntryMixin``\n * ``fluent_blogs.base_models.CommentsEntryMixin``\n * ``fluent_blogs.base_models.CategoriesEntryMixin``\n * ``fluent_blogs.base_models.TagsEntryMixin``\n\nWhen a custom model is used, the admin needs to be registered manually.\nThe admin can inherit from either:\n\n* ``fluent_blogs.admin.AbstractEntryBaseAdmin``\n* ``fluent_blogs.admin.EntryAdmin``\n\nThe views are still rendered using the same templates, but you can also override:\n\n* ``myapp/modelname_archive_*.html``\n* ``myapp/modelname_detail.html``\n* ``myapp/modelname_feed_description.html``\n\n\nContributing\n------------\n\nThis module is designed to be generic, and easy to plug into your site.\nIn case there is anything you didn't like about it, or think it's not\nflexible enough, please let us know. We'd love to improve it!\n\nIf you have any other valuable contribution, suggestion or idea,\nplease let us know as well because we will look into it.\nPull requests are welcome too. :-)\n\n\n\n.. _DISQUS: http://disqus.com/\n.. _django-blog-zinnia: http://django-blog-zinnia.com/documentation/\n.. _django.contrib.syndication: https://docs.djangoproject.com/en/dev/ref/contrib/syndication/\n.. _django-contrib-comments: https://django-contrib-comments.readthedocs.io/\n.. _django.contrib.sitemaps: https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/\n.. _django-categories: https://github.com/callowayproject/django-categories\n.. _django-categories-i18n: https://github.com/django-parler/django-categories-i18n\n.. _django-fluent-comments: https://github.com/django-fluent/django-fluent-comments\n.. _django-fluent-contents: https://github.com/django-fluent/django-fluent-contents\n.. _django-fluent-pages: https://github.com/django-fluent/django-fluent-pages\n.. _django-parler: https://github.com/django-parler/django-parler\n.. _django-polymorphic: https://github.com/bconstantin/django_polymorphic\n.. _django-taggit: https://github.com/alex/django-taggit\n.. _django-taggit-autocomplete-modified: http://packages.python.org/django-taggit-autocomplete-modified/\n.. _Facebook-comments: https://developers.facebook.com/docs/reference/plugins/comments/\n\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "A blog engine with flexible block contents (based on django-fluent-contents).",
"version": "3.1",
"project_urls": {
"Download": "https://github.com/edoburu/django-fluent-blogs/zipball/master",
"Homepage": "https://github.com/edoburu/django-fluent-blogs"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "41374d167552ee996ca77e21b42d1d9e6e0bbaba49dcf6fc52dcb815766221a4",
"md5": "e672ecf84087f3907a2c99d70c8c8497",
"sha256": "2863ca76251cc7a0d11bf273c7521816f1b111409d579b69c01e23e3a2d8b892"
},
"downloads": -1,
"filename": "django_fluent_blogs-3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e672ecf84087f3907a2c99d70c8c8497",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 87786,
"upload_time": "2024-02-05T09:44:12",
"upload_time_iso_8601": "2024-02-05T09:44:12.750480Z",
"url": "https://files.pythonhosted.org/packages/41/37/4d167552ee996ca77e21b42d1d9e6e0bbaba49dcf6fc52dcb815766221a4/django_fluent_blogs-3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8bb3ef234c127f7ef45d7217066ecdefd8c96277417204a8ede0061b3f5c5018",
"md5": "57156ccb0bc849df03ca37a4f5a4c0e8",
"sha256": "dc4310f580754c482277d09694240881102b8fd7e6f14d834686cae18029bfb7"
},
"downloads": -1,
"filename": "django-fluent-blogs-3.1.tar.gz",
"has_sig": false,
"md5_digest": "57156ccb0bc849df03ca37a4f5a4c0e8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 60751,
"upload_time": "2024-02-05T09:44:14",
"upload_time_iso_8601": "2024-02-05T09:44:14.965595Z",
"url": "https://files.pythonhosted.org/packages/8b/b3/ef234c127f7ef45d7217066ecdefd8c96277417204a8ede0061b3f5c5018/django-fluent-blogs-3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-05 09:44:14",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "edoburu",
"github_project": "django-fluent-blogs",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"tox": true,
"lcname": "django-fluent-blogs"
}