After reading the article I posted about here, the way I was working with Jinja2 templates, HTML, and Markdown was beginning to bother me.
I really want the "how it looks" to be in the CSS. If I can get the layout and everything else about how the site looks into CSS, then all the Jinja2 templating needs to do is specify what data I'm working with, and what classes should be applied.
So here's what I'm thinking:

I'm already passing data fields and possibly forms to Jinja2, then telling Jinja when to use them in the HTML structure of the page. I'm also using Markdown, so I can write blog posts like this, then have a Jinja filter parse the output, with the result being HTML structure and data. (As an aside, I'm thinking about switching to Creole, but it will still parse to HTML structure.) The end result is always HTML(duh) and the HTML can specify CSS classes to use.

So when I pass data fields to Jinja, I can also pass variables that indicate what CSS classes I want to use.

For example:

when passing data to a template I can pass something like this:

    context = {
        "page": {"title":"Some Title", "subtitle":"Some SubTitle", "body":"Markdown TEXT"}
        "form": comment_form,
        "classes": {"page_div":"blog"}
    }
    ...
    return render_template('/page.html', **context)

Then in my Jinja2 template, the page_div gets inserted at the appropriate place:

    <div class="{{ classes.page_div }}">
        <h1 class="title">{{ page.title }}</h1>
        <h3 class="subtitle">{{ page.subtitle}}</h3>
        <p class="body">{{ page.body|markdown }}<p>
   </div>

Of course that's a real basic example, but I think it'll work. I'll have to try it out.