Я создаю пользовательскую директиву, которая наследует Admonition
и хотела бы включить именованную ссылку, используя :ref:`some_label`
, которая принимает название директивы в качестве отображаемого имени ссылки, почти так же, как на рисунках используется текст заголовка как отображаемое имя.
Мне не удалось воспроизвести способ, которым директивы Figure () или Image () делают это в директиве admonition. Я могу заставить его работать с добавлением узла раздела, но это вызывает дублирование заголовка.
Я ищу простое решение, которое решит приведенный ниже вариант использования:
Some reference to :ref:`policy_one`.
.. _policy_one
.. policy Some policy title
text
Следует отобразить как:
Некоторая ссылка на Политика - Некоторая часть названия политики .
Я часто получаю сообщение об ошибке
undefined label: policy_one (if the link has no caption the label must precede a
section header)
Код
Моя простая директива политики, которая не работает:
class PolicyDirective(directives.admonitions.Admonition):
def run(self):
self.options['class'] = ['policy']
return super().run()
Реорганизация Admonition, которая работает, но вызывает дублирование названий:
class PolicyDirective(directives.admonitions.Admonition):
def run(self):
set_classes(self.options)
self.assert_has_content()
text = '\n'.join(self.content)
admonition_node = self.node_class(text, **self.options)
self.add_name(admonition_node)
if self.node_class is nodes.admonition:
title_text = 'Policy - ' + self.arguments[0]
textnodes, messages = self.state.inline_text(title_text,
self.lineno)
title = nodes.title(title_text, '', *textnodes)
title.source, title.line = (
self.state_machine.get_source_and_line(self.lineno))
admonition_node += title
admonition_node += messages
section = nodes.section()
section += title
if not 'classes' in self.options:
admonition_node['classes'] += ['admonition-' +
nodes.make_id(title_text)]
self.state.nested_parse(self.content, self.content_offset,
admonition_node)
return [section, admonition_node]