Fixed #11100 - Added get_comment_permalink template tag to comments app to be able to customize the anchor pattern of a comment from the template. Thanks to Idan Gazit for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12080 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
936c99b7c7
commit
abcf997713
|
@ -252,8 +252,23 @@ def comment_form_target():
|
||||||
"""
|
"""
|
||||||
return comments.get_form_target()
|
return comments.get_form_target()
|
||||||
|
|
||||||
|
#@register.simple_tag
|
||||||
|
def get_comment_permalink(comment, anchor_pattern=None):
|
||||||
|
"""
|
||||||
|
Get the permalink for a comment, optionally specifying the format of the
|
||||||
|
named anchor to be appended to the end of the URL.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
{{ get_comment_permalink comment "#c%(id)s-by-%(user_name)s" }}
|
||||||
|
"""
|
||||||
|
|
||||||
|
if anchor_pattern:
|
||||||
|
return comment.get_absolute_url(anchor_pattern)
|
||||||
|
return comment.get_absolute_url()
|
||||||
|
|
||||||
register.tag(get_comment_count)
|
register.tag(get_comment_count)
|
||||||
register.tag(get_comment_list)
|
register.tag(get_comment_list)
|
||||||
register.tag(get_comment_form)
|
register.tag(get_comment_form)
|
||||||
register.tag(render_comment_form)
|
register.tag(render_comment_form)
|
||||||
register.simple_tag(comment_form_target)
|
register.simple_tag(comment_form_target)
|
||||||
|
register.simple_tag(get_comment_permalink)
|
|
@ -104,6 +104,44 @@ This returns a list of :class:`~django.contrib.comments.models.Comment` objects;
|
||||||
see :ref:`the comment model documentation <ref-contrib-comments-models>` for
|
see :ref:`the comment model documentation <ref-contrib-comments-models>` for
|
||||||
details.
|
details.
|
||||||
|
|
||||||
|
.. templatetag:: get_comment_permalink
|
||||||
|
|
||||||
|
Linking to comments
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
To provide a permalink to a specific comment, use :ttag:`get_comment_permalink`::
|
||||||
|
|
||||||
|
{% get_comment_permalink comment_obj [format_string] %}
|
||||||
|
|
||||||
|
By default, the named anchor that will be appended to the URL will be the letter
|
||||||
|
'c' followed by the comment id, for example 'c82'. You may specify a custom
|
||||||
|
format string if you wish to override this behavior::
|
||||||
|
|
||||||
|
{% get_comment_permalink comment "#c%(id)s-by-%(user_name)s"%}
|
||||||
|
|
||||||
|
The format string is a standard python format string. Valid mapping keys
|
||||||
|
include any attributes of the comment object.
|
||||||
|
|
||||||
|
Regardless of whether you specify a custom anchor pattern, you must supply a
|
||||||
|
matching named anchor at a suitable place in your template.
|
||||||
|
|
||||||
|
For example::
|
||||||
|
|
||||||
|
{% for comment in comment_list %}
|
||||||
|
<a name="c{{ comment.id }}"></a>
|
||||||
|
<a href="{% get_comment_permalink comment %}">
|
||||||
|
permalink for comment #{{ forloop.counter }}
|
||||||
|
</a>
|
||||||
|
...
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
There's a known bug in Safari/Webkit which causes the named anchor to be
|
||||||
|
forgotten following a redirect. The practical impact for comments is that
|
||||||
|
the Safari/webkit browsers will arrive at the correct page but will not
|
||||||
|
scroll to the named anchor.
|
||||||
|
|
||||||
.. templatetag:: get_comment_count
|
.. templatetag:: get_comment_count
|
||||||
|
|
||||||
Counting comments
|
Counting comments
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from django.contrib.comments.forms import CommentForm
|
from django.contrib.comments.forms import CommentForm
|
||||||
from django.contrib.comments.models import Comment
|
from django.contrib.comments.models import Comment
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.template import Template, Context
|
from django.template import Template, Context
|
||||||
from regressiontests.comment_tests.models import Article, Author
|
from regressiontests.comment_tests.models import Article, Author
|
||||||
from regressiontests.comment_tests.tests import CommentTestCase
|
from regressiontests.comment_tests.tests import CommentTestCase
|
||||||
|
@ -63,3 +64,23 @@ class CommentTemplateTagTests(CommentTestCase):
|
||||||
|
|
||||||
def testGetCommentListFromObject(self):
|
def testGetCommentListFromObject(self):
|
||||||
self.testGetCommentList("{% get_comment_list for a as cl %}")
|
self.testGetCommentList("{% get_comment_list for a as cl %}")
|
||||||
|
|
||||||
|
def testGetCommentPermalink(self):
|
||||||
|
self.createSomeComments()
|
||||||
|
t = "{% load comments %}{% get_comment_list for comment_tests.author author.id as cl %}"
|
||||||
|
t += "{% get_comment_permalink cl.0 %}"
|
||||||
|
ct = ContentType.objects.get_for_model(Author)
|
||||||
|
author = Author.objects.get(pk=1)
|
||||||
|
ctx, out = self.render(t, author=author)
|
||||||
|
self.assertEqual(out, "/cr/%s/%s/#c2" % (ct.id, author.id))
|
||||||
|
|
||||||
|
def testGetCommentPermalinkFormatted(self):
|
||||||
|
self.createSomeComments()
|
||||||
|
t = "{% load comments %}{% get_comment_list for comment_tests.author author.id as cl %}"
|
||||||
|
t += "{% get_comment_permalink cl.0 '#c%(id)s-by-%(user_name)s' %}"
|
||||||
|
ct = ContentType.objects.get_for_model(Author)
|
||||||
|
author = Author.objects.get(pk=1)
|
||||||
|
ctx, out = self.render(t, author=author)
|
||||||
|
self.assertEqual(out, "/cr/%s/%s/#c2-by-Joe Somebody" % (ct.id, author.id))
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue