Issues with creating a filter

Skip to first unread message

Artium Nihamkin

Aug 14, 2012, 8:53:58 PM8/14/12
I use Blogofile version 0.7.1 that I installed with easy install.

I wanted to make my own filter, and used the following documentation page as a reference:
Unfortunately, I encountered issues, some of which I managed to figure out, others are still open. I will appreciate getting help or helpful comments on these.

1. I could not find where the default filter chain is located. I did a search on all files in the _template folder but could not find anything. I suspect that blog.content contains content already filtered by markdown and syntax_highlight in some default way. If this is the case, I think it should be documented as it is a bit confusing.

2. For out of the box Blogofile, post.mako does not inherit from base.mako, so using the filter macro as advised in the earlier linked page produced weird python errors.

3. My filters is using a regex to substitute a special tag similar to the $$code tag. The problem is that sometimes the excerpt cut the tag in the middle and when the regex is run on the excerpt, no match is found. This will display part of the tag in the excerpt text. I checked with $$code, and it does not syntax highlight in the excerpt, but there is also no remaining part of the opening tag.

4. I discovered that my filter is run too many times, which may lead to performance issues, this is because the filtering happens in post.mako, and this template is included in many others (categories, chronological etc.). I wish there were a way to "activate" the filter where markdown and syntax highlighting filters are located. So when blog.content i used in a template, it is already filtered by my filter.

5. It is worth noting that there is also an option to extend the markdown engine itself ( Have not tried it yet, but I believe it will not solve the excerpt cut in the middle issue.

Thank you,

Artium Nihamkin

Sep 24, 2012, 6:21:10 PM9/24/12
Another unrelated question (previous question are still relevant)

6. How can I add a custom configuration variable in that will be accessible in the mako templates?


Sep 24, 2012, 11:05:44 PM9/24/12
Hi, I've managed to create a filter that minifies the HTML pages just now, just in case you find it useful, you can use, copy and/or improve it.

Here's how I did it:

1. Go to your _filters directory (same level with, if you don't have one, just create it). Then create a file named:

2. Paste the following code in the (it kinda sucks since I'm a newbie myself):
import re

def run(content):
    """Returns a minified HTML."""

    ntr_spaces = re.compile(r'\n|\t|\r', re.IGNORECASE)
    dbl_spaces = re.compile(r'\s{2,}', re.IGNORECASE)
    content = ntr_spaces.sub('', content)
    content = dbl_spaces.sub(' ', content)

    return content.strip()

3. Go to _templates and create a file named: base.mako (if you don't have it, just create one) and paste the following code:
<%def name="filter(chain)" filter="trim">
    ## Definition of this function.

    <% return bf.filter.run_chain(chain, capture(caller.body)) %>

4. Open site.mako file and paste the following at the top of the file:
<%inherit file="base.mako" />

5. Now still in site.mako, wrap your templates like the following example:
<%self:filter chain="html_minifier">

Voila! Now you have a HTML minifier. There are still room for improvements for that code (it didn't consider inline css and js) so use caution. But the point is making your own filter, so experiment and enjoy ^^,

Kind regards,

Reply all
Reply to author
0 new messages