django添加多说功能很方便,官方有现成的SDK。使用可以参考官方文档http://dev.duoshuo.com/python-sdk,具体的安装配置可见安装帮助和文档http://dev.duoshuo.com/threads/500c9c58a03193c12400000c
主要记录一下优化。
如果按照官方文档配置完毕后,用chrome按F12会显示一条警告信息
请为<div class="ds-thread">设置data-thread-key属性以便让多说系统能够正确匹配网页和评论,否则很容易导致评论框串号、重复等错误。 http://dev.duoshuo.com/threads/500c9c58a03193c12400000c
根据查看官方的后续文档大致的意思是说,在插入通用代码时,可以增加一些参数,来优化系统避免出错。
那怎么实现呢,首先我们修改引用多说功能的html页面,把文章的id和标题变量在template中传入多说标签中。
<div class="duoshuo">{% duoshuo_comments ArticleObj.id ArticleObj.title %}</div>
修改多说的函数和渲染器,如下
class DuoshuoCommentsNode(Node): def __init__(self,article_id,article_title,short_name=DUOSHUO_SHORT_NAME): self.article_id = template.Variable(article_id) self.article_title = template.Variable(article_title) self.short_name = short_name def render(self, context): #根据上下文转换为真实的变量内容 actual_article_id = self.article_id.resolve(context) actual_article_title = self.article_title.resolve(context) code = '''<!-- Duoshuo Comment BEGIN --> <div class="ds-thread" data-thread-key="%s" data-title="%s"></div> <script type="text/javascript"> var duoshuoQuery = {short_name:"%s"}; (function() { var ds = document.createElement('script'); ds.type = 'text/javascript';ds.async = true; ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js'; ds.charset = 'UTF-8'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds); })(); </script> <!-- Duoshuo Comment END -->''' % (actual_article_id,actual_article_title,self.short_name) return code def duoshuo_comments(parser, token): #print token #将文章id号和文章标题作为模版变量传入标签 short_name,article_id,article_title= token.contents.split() if DUOSHUO_SHORT_NAME: return DuoshuoCommentsNode(article_id,article_title,DUOSHUO_SHORT_NAME) elif len(short_name) == 2: return DuoshuoCommentsNode(article_id,article_title,short_name[1]) else: raise template.TemplateSyntaxError, "duoshuo_comments tag takes SHORT_NAME as exactly one argument" duoshuo_comments = register.tag(duoshuo_comments)
说明:
那这样就可以把文章的id和标题作为变量传入多说的通用代码里面了,避免了警告,从而实现优化。
Cloudhu 个人随笔|built by django|
沪ICP备16019452号-1