Строка Django исчезает в шаблоне при применении фильтра ЮникодаPython

Программы на Python
Ответить
Anonymous
 Строка Django исчезает в шаблоне при применении фильтра Юникода

Сообщение Anonymous »

У меня есть самописный инструмент, который преобразует индийские транслитерированные строки в выходные данные Unicode и работает следующим образом:
>>> x_HK_to_UNI("ahaM")

В результате получается следующая строка:
'aha\xe1\xb9\x82''

Пока все хорошо, этот инструмент протестирован и использовался для преобразования тысяч документов.
Сейчас я пишу приложение Django и хочу применить эту функцию в качестве фильтра в шаблоне. Код выглядит следующим образом:
from __future__ import unicode_literals
from django import template
from django.utils.encoding import smart_text
from xliterator import *
register = template.Library()

@register.filter
def process_trans_for_html(string):
newstring = []
string = string.split(' ')
for word in string:
if word[-3:] == '_xn' :
newstring.append(x_HK_to_UNI(word[:1]).upper()+(x_HK_to_UNI(word[1:-3]).lower())
elif word[-3:] == '_xh' :
newstring.append(x_HK_to_UNI(word[:-3]).lower())
else:
newstring.append(word)
return ' '.join(newstring)

В шаблоне я передаю данные в фильтр следующим образом:
{{ line.line|process_trans_for_html }}

В принципе функция работает до тех пор, пока ничего не заменено, поэтому при обработке yena_xn он отображается на сайте корректно как Yena.
Но ahaM_xn нужно превратить в ahaṃ (это работа x_HK_to_UNI) - и когда такое слово встречается, все строка просто исчезает и оставляет пустое место на странице.
Есть какие-нибудь предложения по этому поводу? Я уже пробовал все виды преобразований Unicode, и, похоже, это не помогло. Я чувствую себя довольно растерянным. Также нет сообщения об ошибке.
Я использую Python2.7.
РЕДАКТИРОВАТЬ: Здесь соответствующие части xliterator.py:
import sys, re, os

SEPARATOR_PRIMARY=";"

class Xlator(dict): # Xlator is initialized through a mapping
def _make_regex(self):
"""Build re object based on the keys of the current dict"""
return re.compile("|".join(map(re.escape, self.keys())))
def __call__(self, match):
"""Handler invoked for each regex match"""
return self[match.group(0)]
def xlate(self, text):
"""Translate text, returns the modified text"""
return self._make_regex().sub(self, text)

def _transposeDict(d): # returns a dict with key value transposed
nd = {}
for (k,v) in d.items():
nd[v]=k
return nd

#Unicode to HK
DICT_UNI_HK = {'ā':'A','Ā':'A','ī':'I','Ī':'I','ū':'U','Ū':'U',\
'ṛ':'R','Ṛ':'R','ṝ':'RR','ḷ':'L','Ḷ':'L','ḹ':'LL',\
'ṃ':'M','Ṃ':'M','ḥ':'H','Ḥ':'H','ṅ':'G','Ṅ':'G',\
'ñ':'J','Ñ':'J','ṭ':'T','Ṭ':'T','ḍ':'D','Ḍ':'D',\
'ṇ':'N','Ṇ':'N','ś':'z','Ś':'z','ṣ':'S','Ṣ':'S',
}

def x_UNI_to_HK(in_str_UNI): # input:
xlator_Obj = Xlator(DICT_UNI_HK)
return xlator_Obj.xlate(in_str_UNI)

def x_HK_to_UNI(in_str_UNI):
DICT_HK_UNI = dict (zip(DICT_UNI_HK.values(),DICT_UNI_HK.keys()))
xlator_Obj = Xlator(DICT_HK_UNI)
return xlator_Obj.xlate(in_str_UNI)


Подробнее здесь: https://stackoverflow.com/questions/328 ... ode-filter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»