自动生成节号的宏

Macro to automatically generate section numbers

我正在努力创建一个宏来自动生成节号和小节号。我原以为下面的代码片段会起作用,但如果尚未设置,则无法分配值。我确信这是显而易见的,但我缺乏 jinja 经验表明......或者可能缺乏 Python 经验......或两者兼而有之!

我收到这个错误。

{% set sectionnumber.value = sectionnumber.value + 1 %}
jinja2.exceptions.TemplateRuntimeError: cannot assign attribute on non-namespace object

{% macro getsectionnumber(type) -%}

  {% if subsectionnumber is none %}
    {% if sectionnumber is none  %}
      {% set sectionnumber = namespace(value=0) %}
    {% endif %}
    {% set subsectionnumber = namespace(value=0) %}
  {% endif %}

  {% if type == 'section' %}
    {% if sectionnumber is none  %}
      {% set sectionnumber = namespace(value=0) %}
    {% endif %}
    {% set sectionnumber.value = sectionnumber.value + 1 %}
    {{ sectionnumber.value }}
  {% endif %}

  {% if type == 'subsection' %}
    {% set subsectionnumber.value = subsectionnumber.value + 1 %}
    {{ sectionnumber.value }}.{{ subsectionnumber.value }}
  {% endif %}

我的模板:

template = """
{% set sectionnumber = namespace(value=0) %}
{% set subsectionnumber = namespace(value=0) %}
{% macro getsectionnumber(type) -%}
  {% if type == 'section' %}
    {% set sectionnumber.value = sectionnumber.value + 1 %}
    {{ sectionnumber.value }}
  {% endif %}    
  {% if type == 'subsection' %}
    {% set subsectionnumber.value = subsectionnumber.value + 1 %}
    {{ sectionnumber.value }}.{{ subsectionnumber.value }}
  {% endif %}
{% endmacro %}

{{ getsectionnumber('section') }}
{{ getsectionnumber('subsection') }}
{{ getsectionnumber('subsection') }}
{{ getsectionnumber('section') }}
{{ getsectionnumber('subsection') }}
{{ getsectionnumber('subsection') }}
    """

打印模板:

print(Template(template).render())

结果:

1
 
1.1

1.2

2

2.3

2.4