« Posts tagged Profanity Filter

Django: A Profanity Filter

The reason for it:

There are often times when you would like to display content on your page that was actually submitted by another user, such as displaying a list of recent posts on your homepage or something.  The problem is that you don’t want to post any offensive material on such a prominent page.  Without real live human moderation, the best we can do is strip out things we know are offensive (to most people anyway), such as bad words.  Here’s a profanity filter for Django I wrote using code mostly sheisted from django.core.validators.

And here she is:

Here’s what the filter looks like: (If you don’t know how to make a filter in Django, read the documentation)

@register.filter("replace_bad_words")
def replace_bad_words(value):
    """ Replaces profanities in strings with safe words
    For instance, "shit" becomes "s--t"
    """
    words_seen = [w for w in settings.PROFANITIES_LIST if w in value]
    if words_seen:
        for word in words_seen:
            value = value.replace(word, "%s%s%s" % (word[0], '-'*(len(word)-2), word[-1]))
    return value

Some other things:

Just throw that on a django template variable and it will replace words like “shit” with “s–t.” It won’t change words like “ass” and “dick” since they are technically not bad words… but if you think they are, you can do something like this:

...
extra_bad_words = ['ass', 'dick']

bad_words = settings.PROFANITIES_LIST.extend(extra_bad_words)

words_seen = [w for w in bad_words if w in value]
...

Pretty useful huh?

Oh, one more thing to add — this filter depends on the profanities list that is included in Django.  To get this, make sure you import settings:


from django.conf import settings

That’s it.

I know there are a lot of details missing.  I apologize.  If you make a comment here, I’ll be happy to help you out.