It is not possible to do it without Data Repeaters. There is no syntax for referencing arbitrary variables in an expression. There are some context variables (e.g., CurrentUser) with communities.
One of the issues that I've seen for wanting something like you do is to not have to expose the ID value(s) in the URL (it's icky). If your model is that every product has its own Page that is created from the same Page Template and the Page Template has the Data Repeater, and you do not want to expose the ID, then you could use an alias redirect (they are server side) to 'hide' the ID from the end user and keep a more user/search friendly URL.
For example, given two pages that extend the same page template:
/products/widget1 redirects to /products/widget1?id=0000000789879XUAZb
/products/widget2 redirects to /products/widget2?id=00000007897898UZXb