Login

nofollow filter

Author:
svetlyak
Posted:
July 13, 2007
Language:
Python
Version:
.96
Score:
7 (after 9 ratings)

This filter add extra attribute rel="nofollow" to any "<a ..." element in the value, which does not contain it already. I use this to filter comments text in my blog.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from django.template import Library
import re

register = Library()

r_nofollow = re.compile('<a (?![^>]*nofollow)')
s_nofollow = '<a rel="nofollow" '

def nofollow(value):
    return r_nofollow.sub(s_nofollow, value)

register.filter(nofollow)

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 11 months ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 1 week ago
  3. Serializer factory with Django Rest Framework by julio 1 year, 6 months ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
  5. Help text hyperlinks by sa2812 1 year, 7 months ago

Comments

polarbear (on July 24, 2007):

You can use also jQuery like:

$(".comment a").attr({rel: "nofollow"});

to add rel="nofollow" attribute to all a within class .comment

#

luckystarr (on September 7, 2007):

@polarbear

This would not work. I doubt that Google interprets JavaScript to check if it may or may not contribute the current sites pagerank to a link.

#

muffinresearch (on July 3, 2008):

One small issue with this is that the regex doesn't match when you just add the text "nofollow" somewhere in one of the links being tested e.g: an href with a fragment-identifier like so: "blah.com#nofollow"

The following regex prevents bypassing the filter in this way

re.compile('<a (?![^>]*rel=["\']nofollow[\'"])')

#

muhuk (on April 9, 2009):

building on muffinresearch's regex:

<a (?![^>]*rel=["\']nofollow[\'"])(?=[^>]*href=["\']http)

This matches only internal links. (hopefully)

#

Please login first before commenting.