Ticket #10285: render_comment_list.diff
File render_comment_list.diff, 4.4 KB (added by , 16 years ago) |
---|
-
django/contrib/comments/templatetags/comments.py
113 113 def get_context_value_from_queryset(self, context, qs): 114 114 return list(qs) 115 115 116 class RenderCommentListNode(CommentListNode): 117 """ Render the comment list directly """ 118 119 #@classmethod 120 def handle_token(cls, parser, token): 121 """Class method to parse render_comment_list and return a Node.""" 122 tokens = token.contents.split() 123 if tokens[1] != 'for': 124 raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0]) 125 126 # {% render_comment_list for obj %} 127 if len(tokens) == 3: 128 return cls(object_expr=parser.compile_filter(tokens[2])) 129 130 # {% render_comment_list for app.models pk %} 131 elif len(tokens) == 4: 132 return cls( 133 ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]), 134 object_pk_expr = parser.compile_filter(tokens[3]) 135 ) 136 handle_token = classmethod(handle_token) 137 138 def render(self, context): 139 ctype, object_pk = self.get_target_ctype_pk(context) 140 if object_pk: 141 template_search_list = [ 142 "comments/%s/%s/list.html" % (ctype.app_label, ctype.model), 143 "comments/%s/list.html" % ctype.app_label, 144 "comments/list.html" 145 ] 146 qs = self.get_query_set(context) 147 context.push() 148 liststr = render_to_string(template_search_list, {"comment_list" : self.get_context_value_from_queryset(context, qs)}, context) 149 context.pop() 150 return liststr 151 else: 152 return '' 153 116 154 class CommentCountNode(BaseCommentNode): 117 155 """Insert a count of comments into the context.""" 118 156 def get_context_value_from_queryset(self, context, qs): … … 217 255 return CommentListNode.handle_token(parser, token) 218 256 219 257 #@register.tag 258 def render_comment_list(parser, token): 259 """ 260 Render the comment list (as returned by ``{% render_comment_list %}``) through 261 the ``comments/list.html`` template 262 263 Syntax:: 264 {% render_comment_list for [object] %} 265 {% render_comment_list for [app].[model] [object_id] %} 266 """ 267 return RenderCommentListNode.handle_token(parser, token) 268 269 #@register.tag 220 270 def get_comment_form(parser, token): 221 271 """ 222 272 Get a (new) form object to post a new comment. … … 254 304 255 305 register.tag(get_comment_count) 256 306 register.tag(get_comment_list) 307 register.tag(render_comment_list) 257 308 register.tag(get_comment_form) 258 309 register.tag(render_comment_form) 259 310 register.simple_tag(comment_form_target) -
django/contrib/comments/templates/comments/list.html
1 <dl id="comments"> 2 {% for comment in comment_list %} 3 <dt id="c{{ comment.id }}"> 4 {{ comment.submit_date }} - {{ comment.name }} 5 </dt> 6 <dd> 7 <p>{{ comment.comment }}</p> 8 </dd> 9 {% endfor %} 10 </dl> -
tests/regressiontests/comment_tests/tests/templatetag_tests.py
63 63 64 64 def testGetCommentListFromObject(self): 65 65 self.testGetCommentList("{% get_comment_list for a as cl %}") 66 67 def testRenderCommentList(self, tag=None): 68 t = "{% load comments %}" + (tag or "{% render_comment_list for comment_tests.article a.id %}") 69 ctx, out = self.render(t, a=Article.objects.get(pk=1)) 70 self.assert_(out.strip().startswith("<dl id=\"comments\">")) 71 self.assert_(out.strip().endswith("</dl>")) 72 73 def testRenderCommentListFromLiteral(self): 74 self.testRenderCommentList("{% render_comment_list for comment_tests.article 1 %}") 75 76 def testRenderCommentListFromObject(self): 77 self.testRenderCommentList("{% render_comment_list for a %}")