{% macro dynamic(dynamic_param_name) %}
...
<form action="{{ url_for('main.index', dynamic_param_name=1) }}" method="post">
...
{% endmacro dynamic %}
like: {{ dynamic_param_name }}=1
url_for
accepts kwargs after first argument.
{% macro dynamic(**kwargs) %}
...
<form action="{{ url_for('main.index', **kwargs) }}" method="post">
...
{% endmacro dynamic %}
When you need it, you can call it like this dynamic(dynamic_first=1, dynamic_second=2)
.
edit:
If what you need is only to change the argument name dynamically, I think you could do it like this:
{% macro dynamic(param_name) %}
{% set keyname={param_name:1} %}
<form action="{{ url_for('main.index', **keyname) }}" method="post">
{% endmacro dynamic %}