我有一个Sphinx文档实用程序的简单扩展(我使用的版本是Sphinx-1.1.3-py2.6)。非常像Doug Hellmann的this优秀例子。如何将 rel ='bar'属性添加到 标记的最终HTML中?
似乎有几种方法可以做到这一点,但我找不到一个简单的方法。建议和提示表示赞赏。
以这种方式创建参考节点:
node = nodes.reference(rawtext, utils.unescape(text),
internal=False,
refuri=ref,
classes=['foocss'],
rel='bar',
**options)
但是, rel ='bar'属性会从最终的HTML标记中删除。通过源代码搜索,我得到了 sphinx / writers / html.py 和 HTMLTranslator 类。以下是visit_reference方法的一部分:
# overwritten
def visit_reference(self, node):
atts = {'class': 'reference'}
<snip>
if 'reftitle' in node:
atts['title'] = node['reftitle']
self.body.append(self.starttag(node, 'a', '', **atts))
不处理其他属性。也许他们可以在其他部分被替换。在这方面我找不到任何有用的东西。
所以,我可以:
我确信我错过了明显而优雅的解决方案。
谢谢!
答案 0 :(得分:0)
我设法用download_reference
执行此操作。使用app.add_node
我覆盖了visit_...
方法:
import posixpath
from sphinx.writers.html import HTMLTranslator
from sphinx.addnodes import download_reference
def visit_download_reference(self, node):
if node.hasattr('filename'):
self.body.append(
'<a class="reference download internal" href="%s" %s>' %
(posixpath.join(self.builder.dlpath, node['filename']), 'rel="%s"' % node['rel'] if node.get('rel', None) else ''))
self.context.append('</a>')
else:
self.context.append('')
def setup(app):
app.add_node(download_reference, html=(visit_download_reference, HTMLTranslator.depart_download_reference))