- About Pinax
- Important Links
- Overview
- Documentation
- Change Log
- Contribute
- Code of Conduct
- Connect with Pinax
- License
Pinax is an open-source platform built on the Django Web Framework. It is an ecosystem of reusable Django apps, themes, and starter project templates. This collection can be found at https://pinaxproject.com.
Where you can find what you need:
- Releases: published to PyPI or tagged in app repos in the Pinax GitHub organization
- Global documentation: Pinax documentation website
- App specific documentation: app repos in the Pinax GitHub organization
- Support information: SUPPORT.md file in the Pinax default community health file repo
- Contributing information: CONTRIBUTING.md file in the Pinax default community health file repo
- Current and historical release docs: Pinax Wiki
pinax-comments
is a comments app for Django.
Django / Python | 3.6 | 3.7 | 3.8 |
---|---|---|---|
2.2 | * | * | * |
3.0 | * | * | * |
To install pinax-comments:
$ pip install pinax-comments
Add pinax.comments
to your INSTALLED_APPS
setting:
INSTALLED_APPS = [
# other apps
"pinax.comments",
]
Add pinax.comments.urls
to your project urlpatterns:
urlpatterns = [
# other urls
url(r"^comments/", include("pinax.comments.urls", namespace="pinax_comments"))
]
Common usage involves wiring up template tags as seen in this example, which presents
a form for adding a new comment on wall_user
, as well as showing existing comments.
Three template tags are used here: comment_target
, which returns a URL for posting
a comment on wall_user
; comment_form
, which returns a comment form for
wall_user
; and comments
, which returns all comments on wall_user
.
<div class="list-group">
<div class="list-group-item">
{% comment_target wall_user as post_url %}
{% comment_form wall_user as comment_form %}
<form class="form" method="post" action="{{ post_url }}">
{% csrf_token %}
{{ comment_form|bootstrap }}
<button class="btn btn-primary">Post Message</button>
</form>
</div>
{% comments wall_user as wall_comments %}
{% for comment in wall_comments %}
<div class="list-group-item">
{{ comment.comment|linebreaks }}
<div class="meta">
<small class="text-muted pull-right">{{ comment.submit_date }}</small>
<small class="text-muted">
<a href="{% url "wall" comment.author.username %}">
{{ comment.author }}
</a>
</small>
</div>
</div>
{% endfor %}
</div>
Returns True if user
can delete comment
.
{% if comment|can_delete_comment:user %}
Returns True if user
can edit comment
.
{% if comment|can_edit_comment:user %}
Returns number of comments on obj
.
Usage:
{% comment_count obj %}
or
{% comment_count obj as var %}
Returns a comment form for obj
. Checks context user to determine
if the comment should be from an authenticated or anonymous user.
Usage:
{% comment_form obj as comment_form %}
Returns the URL for posting a comment on obj
{% comment_target obj %}
or
{% comment_target obj as var %}
Returns iterable of comments on obj
as context variable var
.
{% comments obj as var %}
Both signals provide two keyword arguments: comment
, the relevant Comment
instance, and request
.
Sent when a comment is added.
Sent when a comment is updated.
Override this method to specify if user
can delete comment
. By default only comment authors can edit comments.
Override this method to specify if user
can edit comment
. By default, Django superusers and comment authors can delete comments.
This example hooks.py overrides default load_can_edit()
with a silly alternative:
# myapp.hooks.py
from pinax.comments.hooks import CommentsDefaultHookSet
class CommentsHookSet(CommentsDefaultHookSet):
def load_can_edit(self, user, comment):
return user.username in ["funk", "wagnalls"]
Used to provide your own custom hookset methods, as described above. Value is a dotted path to your own hookset class:
PINAX_COMMENTS_HOOKSET = "myapp.hooks.CommentsHookSet"
- Drop Django 1.11, 2.0, and 2.1, and Python 2,7, 3.4, and 3.5 support
- Add Django 2.2 and 3.0, and Python 3.6, 3.7, and 3.8 support
- Update packaging configs
- Direct users to community resources
- Remove django-user-accounts from test requirements
- Replace deprecated render_to_string()
context_instance
kwarg - Add view tests
- Add templatetag tests
- add django>=1.11 requirement
- update testing requirements
- improve documentation markup
- remove "static" and "templates" dirs from MANIFEST.in
- Add Django 2.0 compatibility testing
- Drop Django 1.9, 1.9, 1.10 and Python 3.3 support
- Move documentation into README, standardize documentation layout
- Convert CI and coverage to CircleCi and CodeCov
- Add PyPi-compatible long description
- Add documentation for templatetags and signals
- Add usage example
- initial release
Contributing information can be found in the Pinax community health file repo.
In order to foster a kind, inclusive, and harassment-free community, the Pinax Project has a Code of Conduct. We ask you to treat everyone as a smart human programmer that shares an interest in Python, Django, and Pinax with you.
For updates and news regarding the Pinax Project, please follow us on Twitter @pinaxproject and check out our Pinax Project blog.
Copyright (c) 2012-present James Tauber and contributors under the MIT license.