рендеринг текстового и чарфилдского чипов из лишних пробелов (Django / Python) - PullRequest
5 голосов
/ 01 февраля 2012

Я заметил, что мой шаблон выполняет рендеринг моих model.CharField и model.TextField без лишних пробелов.

Например, если я введу такие данные, как ...

This     is a           test


to see what  happens.

Поле визуализированного объекта будет выглядеть как ...

This is a test to see what happens.

Это преднамеренная особенность Django или я где-то пропустил какой-то фильтр или параметр?

Я проверил само поле с помощью некоторого кода отладки (print object.field), и оно содержит лишние пробелы, поэтому проблема заключается в стороне рендеринга.

Как разрешить пользователю вводить абзацы данных в TextFields? Как я могу сохранить пробелы, которые мог ввести пользователь?

1 Ответ

12 голосов
/ 01 февраля 2012

Как вы можете видеть даже в StackOverflow, ваши пробелы не отображаются, это из источника вашего вопроса:

This     is a           test


to see what  happens.

Сохранит в базе данных как:

This     is a           test\n\n\nto see what  happens.

Проблемы при рендеринге в формате html:

  1. Лишние пробелы между словами отображаются на дисплее браузером, если только он не находится между тегами

  2. Разрывы строк будут отображаться как разрывы строк в виде простого текста, которые не отображаются в браузере, если между тегами .

Для пробелов вы можете использовать такой шаблонный фильтр , чтобы заменить их эквивалентными сущностями html:  .

Для преобразования разрывов строк базы данных в разрывы строк HTML используйте встроенные фильтры linebreaksbr . Например, если {{ foo }} равно: test\nbar, {{ foo|linebreaksbr }} будет отображать: test<br />bar

  1. Создайте папку "templatetags" в некоторых ваших приложениях с файлом __init__.py в нем.

  2. Сохранить фрагмент , например, в someapp / templatetags / replace_tag.py

  3. Загрузите фильтр шаблона в шаблон как таковой {% load replace_tag %}

  4. Объединение заменяет и разрывы строк br как таковое: {{ foo|linebreaksbr|replace:" ","&nbsp;" }}

Вы также можете создать свой собственный шаблонный фильтр, который будет обрабатывать текст в нужный вам HTML. В любом случае, обратитесь к пользовательской документации фильтра шаблонов для полной информации.

...