Attempts to provide a representative image from a content_object based on
        the content object's get_image() method.

        If there is a another content.object, as in the case of comments and other GFKs,
        then it will follow to that content_object and then get the image.

        Requires get_image() to be defined on the related model even if it just
        returns object.image, to avoid bringing back images you may not want.

        Note that this expects the image only. Anything related (caption, etc) should be stripped.

def image(self):
        """
        Attempts to provide a representative image from a content_object based on
        the content object's get_image() method.

        If there is a another content.object, as in the case of comments and other GFKs,
        then it will follow to that content_object and then get the image.

        Requires get_image() to be defined on the related model even if it just
        returns object.image, to avoid bringing back images you may not want.

        Note that this expects the image only. Anything related (caption, etc) should be stripped.

        """
        obj = self.content_object
        # First, try to get from a get_image() helper method
        try:
            image = obj.get_image()
        except AttributeError:
            try:
                image = obj.content_object.get_image()
            except:
                image = None

        # if we didn't find one, try to get it from foo.image
        # This allows get_image to take precedence for greater control.
        if not image:
            try:
                image = obj.image
            except AttributeError:
                try:
                    image = obj.content_object.image
                except:
                    return None

        # Finally, ensure we're getting an image, not an image object
        # with caption and byline and other things.
        try:
            return image.image
        except AttributeError:
            return image