Найти - Пользователи
Полная версия: Управляющие символы
Начало » Django » Управляющие символы
1
romankrv
Здравствуйте.

Вопрос

при вставке в текст управляющих символов например \r\n - итп с последующим сохранением этого текста в базе происходит следующие:

если строка записывалась с помощью формы т.е. например пользователь набирал текст в поле созданное
через forms.py:
message = forms.CharField (
widget = forms.Textarea (attrs = {'rows':'10', 'cols':'30', 'class':'forma',})
)
и нажимает кнопку enter, то в принципе должен формироваться упр. символы \n\r для индентификации переноса на новую строку

При выводе через ipython:
f = Feedback.objects.get(pk=1)
print f.message
то перевод строк происходит правильно как .

если же через темплэйт производить вывод то в месте где должен быть перенос строки – находиться пробел.
При просмотре базы sqlite3 через модуль фарфокса то тоже спец символы не наблюдаю

модель куда пишу строку: (делал также с включенным переопределенным методом save модели )
class F(models.Model):
message = models.TextField(max_length=1500)

def save(self):
self.message = '1\n\r2\n\r3\n\r4'
super(F,self).save()

def __unicode__(self):
return (
self.message,
)
вопрос: как правильно обрабатывать эти спецсимволы ? Есть ли какие то пайтоновские библиотеки может быть


спасибо
Ferroman
если же через темплэйт производить вывод то в месте где должен быть перенос строки – находиться пробел.
Темплейт html-ный?
romankrv
да темплате нтмл
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><!-- Insert your title here --></title>
</head>
<body>
{{ mes }}
</body>
</html>
вьювом render_to_response вывожу перенную mes
romankrv
lorien
<pre>{{ foobar }}</pre>
или
{{ foobar|linebreaks }}
Да действительно так правильно.
правда http://www.w3schools.com/TAGS/tag_pre.asp не очень то подходит


а я еще нашел метод decode() но это на уровне вьюва уже работать можно со строкой.

или данный метод используют для построения фильтра linebreaks?

вот что выдало: как раз и те спец символы потянуло
In : f.message.decode()
Out: u'1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n8'

type(f.message)
Out: <type ‘unicode’>
romankrv
Ferroman
если же через темплэйт производить вывод то в месте где должен быть перенос строки – находиться пробел.
Темплейт html-ный?
Этот вопрос к тому что если не html-льный то разбирать лучше методом decode() ?
SvartalF
Потому что в HTML \r\n не перенесет текст на следующую строку, для это нужен либо <p>, либо <br />.
Фильтр |linebreaks как раз обрамляет каждую строку тегом <p>
romankrv
SvartalF
Потому что в HTML \r\n не перенесет текст на следующую строку, для это нужен либо <p>, либо <br />.
Фильтр |linebreaks как раз обрамляет каждую строку тегом <p>
Это понятно что не переносят на новую строку.
Я просто считал что джанга эти спецсимволы должна конвертить на лету в символы html кода, когда передается поток данных из вьюва в темплэйт.
Сейчас уже понял что это не так но возможно это было бы удобно.
Ferroman
SvartalF
Да, для того и спрашивал :)
Сейчас уже понял что это не так но возможно это было бы удобно.
Ну так напиши свой фильтр, делов-то ;)
romankrv
lorien
Эээ, зачем писать, он уже есть - linebreaks.
Ага а еще linebreaksbr без вставки <p> только одни <br />
Ferroman
lorien
Ну, вот и замечательно.
Но так бы узнал больше… ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB