从给定对象的所有站点获取Django注释
我使用Django站点框架在不同站点之间共享对象。这很好,因为我能够在模型中定义多对多关系 但是,在使用模板标记“render_comment_list”检索对象的注释(Django comments)时,我只得到那些发布在特定站点中的注释。这是意料之中的,但我也希望得到那些其他的评论,这些评论是针对多个站点共享的对象发布的 深入研究Django注释的代码,似乎这就是导致“问题”的方法:从给定对象的所有站点获取Django注释,django,django-comments,django-sites,Django,Django Comments,Django Sites,我使用Django站点框架在不同站点之间共享对象。这很好,因为我能够在模型中定义多对多关系 但是,在使用模板标记“render_comment_list”检索对象的注释(Django comments)时,我只得到那些发布在特定站点中的注释。这是意料之中的,但我也希望得到那些其他的评论,这些评论是针对多个站点共享的对象发布的 深入研究Django注释的代码,似乎这就是导致“问题”的方法: def get_query_set(self, context): ctype, object_pk
def get_query_set(self, context):
ctype, object_pk = self.get_target_ctype_pk(context)
if not object_pk:
return self.comment_model.objects.none()
qs = self.comment_model.objects.filter(
content_type = ctype,
object_pk = smart_unicode(object_pk),
site__pk = settings.SITE_ID,
)
我的问题是:
- 更改行为的最简单方法是什么,以便模板标记“render_comment_list”显示对象的所有注释,而不仅仅是特定站点的注释
- 我是否需要创建另一个模板标记并复制粘贴99%的Django注释模板标记代码
谢谢您不必复制并超过99%的模板标记代码,只需将
RenderCommentListNode
子类化,并覆盖发现问题的get\u queryset\u方法
。然后复制render\u comment\u list
函数,但使用子类
class RenderCommentListNodeAllSites(RenderCommnetListNode):
def get_query_set(self, context):
ctype, object_pk = self.get_target_ctype_pk(context)
if not object_pk:
return self.comment_model.objects.none()
qs = self.comment_model.objects.filter(
content_type = ctype,
object_pk = smart_unicode(object_pk),
)
def render_comment_list_all_sites(parser, token):
return RenderCommentListNodeAllSites.handle_token(parser, token)
register.tag(render_comment_list_all_sites)
您不必复制并超过模板标记代码的99%,只需子类
RenderCommentListNode
并覆盖get\u queryset\u方法
。然后复制render\u comment\u list
函数,但使用子类
class RenderCommentListNodeAllSites(RenderCommnetListNode):
def get_query_set(self, context):
ctype, object_pk = self.get_target_ctype_pk(context)
if not object_pk:
return self.comment_model.objects.none()
qs = self.comment_model.objects.filter(
content_type = ctype,
object_pk = smart_unicode(object_pk),
)
def render_comment_list_all_sites(parser, token):
return RenderCommentListNodeAllSites.handle_token(parser, token)
register.tag(render_comment_list_all_sites)
谢谢阿拉斯代尔!我做了改变,它正在工作。为清晰起见,编写整个代码(现在可以了!):
class RenderCommentListNodeAllSites(RenderCommentListNode):
def get_query_set(self, context):
ctype, object_pk = self.get_target_ctype_pk(context)
if not object_pk:
return self.comment_model.objects.none()
qs = self.comment_model.objects.filter(
content_type = ctype,
object_pk = smart_unicode(object_pk),
#site__pk = settings.SITE_ID,
)
# The is_public and is_removed fields are implementation details of the
# built-in comment model's spam filtering system, so they might not
# be present on a custom comment model subclass. If they exist, we
# should filter on them.
field_names = [f.name for f in self.comment_model._meta.fields]
if 'is_public' in field_names:
qs = qs.filter(is_public=True)
if getattr(settings, 'COMMENTS_HIDE_REMOVED', True) and 'is_removed' in field_names:
qs = qs.filter(is_removed=False)
return qs
def render_comment_list_all_sites(parser, token):
return RenderCommentListNodeAllSites.handle_token(parser, token)
register.tag(render_comment_list_all_sites)
谢谢阿拉斯代尔!我做了改变,它正在工作。为清晰起见,编写整个代码(现在可以了!):
class RenderCommentListNodeAllSites(RenderCommentListNode):
def get_query_set(self, context):
ctype, object_pk = self.get_target_ctype_pk(context)
if not object_pk:
return self.comment_model.objects.none()
qs = self.comment_model.objects.filter(
content_type = ctype,
object_pk = smart_unicode(object_pk),
#site__pk = settings.SITE_ID,
)
# The is_public and is_removed fields are implementation details of the
# built-in comment model's spam filtering system, so they might not
# be present on a custom comment model subclass. If they exist, we
# should filter on them.
field_names = [f.name for f in self.comment_model._meta.fields]
if 'is_public' in field_names:
qs = qs.filter(is_public=True)
if getattr(settings, 'COMMENTS_HIDE_REMOVED', True) and 'is_removed' in field_names:
qs = qs.filter(is_removed=False)
return qs
def render_comment_list_all_sites(parser, token):
return RenderCommentListNodeAllSites.handle_token(parser, token)
register.tag(render_comment_list_all_sites)