Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

django-threadedcomments

threadedcomments is a Django application which allows for the simple creation of a threaded commenting system. Commenters can reply both to the original item, and reply to other comments as well.

The application is (as of 0.9) built on top of django.contrib.comments, which allows it to be easily extended by other modules.

Installation

Install the package via pip:

pip install django-threadedcomments

It’s preferred to install the module in a virtual environment.

Configuration

Add the following to settings.py:

INSTALLED_APPS += (
    'threadedcomments',
    'django.contrib.comments',
)

COMMENTS_APP = 'threadedcomments'

By placing the threadedcomments app above the django.contrib.comments application, the placeholder comments/list.html template will already be replaced by a threaded view.

Make sure django.contrib.comments is configured in urls.py:

urlpatterns += patterns('',
    url(r'^articles/comments/', include('django.contrib.comments.urls')),
)

Provide a template that displays the comments for the object (e.g. article or blog entry):

{% load threadedcomments_tags %}

...

<h2>Comments for {{ object.title }}:</h2>

{% render_comment_list for object %}
{% render_comment_form for object %}

Template design

Naturally, it’s desirable to write your own version of comments/list.html in your project, or use one of the comments/app/list.html or comments/app/model/list.html overrides.

Make sure to override comments/base.html as well, so the other views of django.contrib.comments are displayed using your web site design. The other templates of django.contrib.comments are very plain as well on purpose (for example comments/posted.html), since these pages depend on the custom design of the web site.

See the provided example app for a basic configuration, including a JavaScript-based reply form that moves to the comment the visitor replies to.

Template tags

The threadedcomments_tags library is a drop-in replacement for the comments library that is required for the plain comments. The tags are forwards compatible; they support the same syntax as django.contrib.comments provides, and they add a few extra parameters.

Fetching comment counts:

{% get_comment_count for [object] as [varname] %}
{% get_comment_count for [object] as [varname] root_only %}

{% get_comment_count for [app].[model] [id] as [varname] %}
{% get_comment_count for [app].[model] [id] as [varname] root_only %}

Fetching the comments list:

{% get_comment_list for [object] as [varname] %}
{% get_comment_list for [object] as [varname] flat %}
{% get_comment_list for [object] as [varname] root_only %}

Rendering the comments list:

{% render_comment_list for [object] %}
{% render_comment_list for [object] root_only %}

{% render_comment_list for [app].[model] [id] %}
{% render_comment_list for [app].[model] [id] root_only %}

Fetching the comment form:

{% get_comment_form for [object] as [varname] %}
{% get_comment_form for [object] as [varname] with [parent_id] %}
{% get_comment_form for [app].[model] [id] as [varname] %}
{% get_comment_form for [app].[model] [id] as [varname] with [parent_id] %}

Rendering the comment form:

{% render_comment_form for [object] %}
{% render_comment_form for [object] with [parent_id] %}
{% render_comment_form for [app].[model] [id] %}
{% render_comment_form for [app].[model] [id] with [parent_id] %}

Rendering the whole tree:

{% for comment in comment_list|fill_tree|annotate_tree %}
    {% ifchanged comment.parent_id %}{% else %}</li>{% endifchanged %}
    {% if not comment.open and not comment.close %}</li>{% endif %}
    {% if comment.open %}<ul>{% endif %}

    <li id="c{{ comment.id }}">
        ...
    {% for close in comment.close %}</li></ul>{% endfor %}
{% endfor %}

The fill_tree filter is required for pagination, it ensures that the parents of the first comment are included as well.

The annotate_tree filter adds the open and close properties to the comment.

Extending the module

The application is built on top of the standard django.contrib.comments framework, which supports various signals, and template overrides to customize the comments.

To customize django-threadedcomments, override the proper templates, or include the apps that provide the missing features. Front-end editing support for example, is left out on purpose. It belongs to the domain of moderation, and policies to know “who can do what”. That deserves to be in a separate application, it shouldn’t be in this application as it focuses on threading. The same applies to social media logins, comment subscriptions, spam protection and Ajax posting.

Note that the standard framework also supports moderation, flagging, and RSS feeds too. More documentation can be found at:

Some of the modules worth looking at are:

These modules can enhance the comments system even further.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-threadedcomments-1.0b1.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_threadedcomments-1.0b1-py2.py3-none-any.whl (27.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django-threadedcomments-1.0b1.tar.gz.

File metadata

File hashes

Hashes for django-threadedcomments-1.0b1.tar.gz
Algorithm Hash digest
SHA256 4e9b42c28192cea2b9e6e5b9611719eaccbed11f4fcf95cfe0637a1f8e782a2b
MD5 ded40b34eeb28e082b6da1fbc383de3b
BLAKE2b-256 632caf5505e45480ec36196a44aa5327979a1ebb9dc6c6f0d1271293b9ce0a01

See more details on using hashes here.

File details

Details for the file django_threadedcomments-1.0b1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_threadedcomments-1.0b1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 1a5179be6cd940787321ad5b013ed4f499efce8671d1d083d294a5651d2658ce
MD5 580697565236eb081a2777de85653129
BLAKE2b-256 3b98e96507739e69e78381d93fb32bd5405fbf64c3c81b312bb9142f338af60b

See more details on using hashes here.

Release history Release notifications | RSS feed

2.0

2 files

1.2

2 files

1.1

2 files

1.0.1

2 files

1.0

2 files

This release

1.0b1 This release

2 files

0.9.0

1 file

0.5.3

1 file

0.5.2

1 file

0.5.1

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page