@register.filter
def fixedwidth(value, arg):
    """
    Truncates or pads a string to be a certain length
    
    Argument: Desired length of string
    """

    try:
        length = int(arg)
    except ValueError: # invalid literal for int()
        return value # Fail silently
    if not isinstance(value, basestring):
        value = str(value)

    if len(value) > (length):
        truncated = value[:length - 3]
        if not truncated.endswith('...'):
            truncated += '...'
        return truncated
    if len(value) <= length:
        padded = value
        spaces_needed = (length - len(value)) + 1
        for space_needed in range(1, spaces_needed):
            padded = "%s " % padded
        return padded

    return value