2013-03-17 1 views
1

Я обрабатываю список в HTML-шаблоне, используя {{my_list | присоединиться: «< \ ш>»}}, и это выглядит как ...Django custom template filter для выделения столбца в блоке текста

$GPGGA,062511,2816.8178,S,15322.3185,E,6,04,2.6,72.6,M,37.5,M,,*68 
$GPGGA,062512,2816.8177,S,15322.3184,E,1,04,2.6,72.6,M,37.5,M,,*62 
$GPGGA,062513,2816.8176,S,15322.3181,E,1,04,2.6,72.6,M,37.5,M,,*67 
$GPGGA,062514,2816.8176,S,15322.3180,E,1,03,2.6,72.6,M,37.5,M,,*66 
$GPGGA,062515,2816.8176,S,15322.3180,E,6,03,2.6,72.6,M,37.5,M,,*60 

Я пытаюсь использовать регулярные выражения, чтобы вставить CSS на 4-й и 5-запятых, поэтому я могу выделить текст в этом столбец, однако я не могу определить выражение для этого. Другие методы для достижения этого также оценили.

Дополнительная информация:

1) каждая строка заканчивается '\ п'. Хотя это можно удалить и отображение HTML не изменилось, я оставил его для регулярного выражения, которое необходимо использовать, если это необходимо. 2) В этом примере строка не всегда будет иметь хороший заголовок, такой как «$ GPGGA», хотя я мог бы добавить его, чтобы помочь ID начинать строку, если это требуется регулярным выражением. 3) Столбцы могут не быть равномерным числом символов, как указано в этом примере.

Фильтров я работаю над следующим

@register.filter(is_safe=True) 
def highight_start(text): 
    return re.sub('regex to find 4th comma in each line', ",<span class='my_highlight'>", text, flags=re.MULTILINE) 

@register.filter(is_safe=True) 
def highight_end(text): 
    return re.sub('regex to find 5th comma in each line', "</span>,", text, flags=re.MULTILINE) 

С уважением

ответ

0

Вы можете достичь, замены 5-й величину с самим значением, завернутым в ваших <span> тегов.

RegEx: ^((?:[\w\d\.\$]+,){4})([\d\.]+)
Замена: \1<span class='my_highlight'>\2</span>

Разъяснения демо здесь: http://regex101.com/r/cX5iA0

Примечание: Я взял на себя пятое значение будет цифр и точек

+0

Спасибо, это заставило меня идти. – Ninga

0

Благодаря @ka, который заставил меня Ontrack с это решение. Мой рабочий фильтр использует:

expression = '^((?:[^,]+,){4})([^,]+)' 
replace = r'\g<1><span class="my_highlight">\g<2></span>' 

#[^,] also allows matching of hidden HTML tags in the text 
#To get the groups to insert back into the text and not be overwritten, they need to be referenced as indicated in 'replace'.