Насколько я могу судить, эта функция не встроена, так как существует несколько решений этой проблемы.
Предполагая, что вы используете BeautifulSoup 4, вот решения, которые я придумал
Жестко закодируйте его. Это требует минимальных изменений, это нормально, если вам не нужно, чтобы отступ был разным в разных обстоятельствах:
myTab = 4 # add this
if pretty_print:
# space = (' ' * (indent_level - 1))
space = (' ' * (indent_level - myTab))
#indent_contents = indent_level + 1
indent_contents = indent_level + myTab
Еще одна проблема с предыдущим решением заключается в том, что текстовое содержимое не будет иметь отступ полностью последовательно, но все равно будет привлекательно. Если вам нужно более гибкое/согласованное решение, вы можете просто изменить класс.
Найдите функцию prettify и измените ее как таковую (она находится в классе Tag в element.py):
#Add the myTab keyword to the functions parameters (or whatever you want to call it), set it to your preferred default.
def prettify(self, encoding=None, formatter="minimal", myTab=2):
Tag.myTab= myTab # add a reference to it in the Tag class
if encoding is None:
return self.decode(True, formatter=formatter)
else:
return self.encode(encoding, True, formatter=formatter)
А затем прокрутите вверх до метода декодирования в классе Tag и внесите следующие изменения:
if pretty_print:
#space = (' ' * (indent_level - 1))
space = (' ' * (indent_level - Tag.myTab))
#indent_contents = indent_level + Tag.myTab
indent_contents = indent_level + Tag.myTab
Затем перейдите к методу decode_contents в классе Tag и внесите следующие изменения:
#s.append(" " * (indent_level - 1))
s.append(" " * (indent_level - Tag.myTab))
Теперь BeautifulSoup('‹root›‹child›‹desc›Text‹/desc›‹/child›‹/root›').prettify(myTab=4) вернет:
<root>
<child>
<desc>
Text
</desc>
</child>
</root>
** Нет необходимости исправлять класс BeautifulSoup, поскольку он наследует класс Tag. Класса Patching Tag достаточно для достижения цели.
person
tryexceptcontinue
schedule
20.03.2013