### Apache Airflow version

2.6.3

### What happened

get_current_context() fail in a user_defined_macros

give
```
{abstractoperator.py:594} ERROR - Exception rendering Jinja template for task 'toot', field 'op_kwargs'. Template: {'arg': '{{ macro_run_id() }}'}
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/models/abstractoperator.py", line 586, in _do_render_template_fields
    rendered_content = self.render_template(
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/template/templater.py", line 168, in render_template
    return {k: self.render_template(v, context, jinja_env, oids) for k, v in value.items()}
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/template/templater.py", line 168, in <dictcomp>
    return {k: self.render_template(v, context, jinja_env, oids) for k, v in value.items()}
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/template/templater.py", line 156, in render_template
    return self._render(template, context)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/models/abstractoperator.py", line 540, in _render
    return super()._render(template, context, dag=dag)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/template/templater.py", line 113, in _render
    return render_template_to_string(template, context)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/utils/helpers.py", line 288, in render_template_to_string
    return render_template(template, cast(MutableMapping[str, Any], context), native=False)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/utils/helpers.py", line 283, in render_template
    return "".join(nodes)
  File "<template>", line 12, in root
  File "/home/airflow/.local/lib/python3.8/site-packages/jinja2/sandbox.py", line 393, in call
    return __context.call(__obj, *args, **kwargs)
  File "/home/airflow/.local/lib/python3.8/site-packages/jinja2/runtime.py", line 298, in call
    return __obj(*args, **kwargs)
  File "/opt/airflow/dags/dags/exporter/finance_closing.py", line 7, in macro_run_id
    schedule_interval = get_current_context()["dag"].schedule_interval.replace("@", "")
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/operators/python.py", line 784, in get_current_context
    raise AirflowException(
airflow.exceptions.AirflowException: Current context was requested but no context was found! Are you running within an airflow task?
```

### What you think should happen instead

User macros should be able to access to the current context 

```
airflow.exceptions.AirflowException: Current context was requested but no context was found! Are you running within an airflow task?
```

### How to reproduce

```python
from airflow.models import DAG
from airflow.operators.python import PythonOperator
from airflow.utils.dates import days_ago

def macro_run_id():
    from airflow.operators.python import get_current_context
    a = get_current_context()["dag"].schedule_interval.replace("@", "")
    if a == "None":
        a = "manual"
    return a


with DAG(dag_id="example2",
         start_date=days_ago(61),
         user_defined_macros={"macro_run_id": macro_run_id},
         schedule_interval="@monthly"):
    def toto(arg):
        print(arg)


    PythonOperator(task_id="toot", python_callable=toto,
                   op_kwargs={"arg": "{{ macro_run_id() }}"})

```


### Operating System

ubuntu 22.04

### Versions of Apache Airflow Providers

_No response_

### Deployment

Other

### Deployment details

_No response_

### Anything else

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

self,
        upstream: Operator,
        ti_count: int | None,
        *,
        session: Session,
    ) -> int | range | None:
        """Infer the map indexes of an upstream "relevant" to this ti.
        The bulk of the logic mainly exists to solve the problem described by
        the following example, where 'val' must resolve to different values,
        depending on where the reference is being used::
            @task
            def this_task(v):  # This is self.task.
                return v * 2
            @task_group
            def tg1(inp):
                val = upstream(inp)  # This is the upstream task.
                this_task(val)  # When inp is 1, val here should resolve to 2.
                return val
            # This val is the same object returned by tg1.
            val = tg1.expand(inp=[1, 2, 3])
            @task_group
            def tg2(inp):