Django Двойные Кавычки и т. Д. - PullRequest
1 голос
/ 21 июля 2009

Я испытываю то, что я считаю странным поведением. В частности, если у меня есть такая строка:

1984: учебная программа
Дональд Р. Хог, Центр обучения, Джордж Оруэлл

«Центр изучения публикаций» - обложка.

Это приводит к следующему после автоматического экранирования системой шаблонов Django:

1984: Учебная программа
Дональд Р. Хог, Центр обучения, Джордж Оруэлл

«Центр изучения публикаций» - Обложка.

Проблема, похоже, заключается в том, что "(цитата), которая должна стать ", экранируется дважды, что приводит к &". Это приводит к странно выглядящему форматированию. Я использую Django 1.0.2, поэтому должно быть в курсе (хотя я должен отметить, что я использую Ubuntu 9.04 с включенным пакетом python-django), но это поведение кажется противоречащим предполагаемому поведению.

Я немного посмотрел на django.utils.html.py, который включает саму функцию:

def escape (html):

"" "Возвращает данный HTML-код с закодированными амперсандами, кавычками и вставками." ""

return mark_safe(force_unicode(html).replace('&','&amp;').replace('<','&lt;').replace('>', '&gt;').replace('"', '&quot;').replace("'",'&#39;'))

escape = allow_lazy (escape, unicode)

Во всяком случае, похоже, что он должен избегать & прежде всего, что было бы хорошо. Поэтому я подозреваю, что он вызывается дважды. Есть мысли?

Спасибо.

Обновление: Я подозревал, что это может иметь какое-то отношение к Django Ubuntu, который указан как "1.0.2-1", поэтому я установил "1.0.2-final" и испытываю та же проблема.

Ответы [ 2 ]

1 голос
/ 21 июля 2009

О харди хар хар,

Глупый я, Google настолько умен, что они уже избежали тех символов в XML, который я анализировал. Разве вы не знаете, час игры, чтобы понять, что Google снова перехитрил меня!

P.S. В случае, если кто-нибудь еще сталкивался с подобной проблемой, я специально ссылаюсь на XML, возвращаемый при выполнении такого запроса: http://books.google.com/books/feeds/volumes?q=1984, данные уже экранированы для вас! Это, как говорится, немного раздражает меня, потому что включение | безопасных в мои шаблоны будет означать, что если я когда-нибудь получу данные из другого источника, которому я не очень доверяю ... В любом случае, спасибо за чтение!

1 голос
/ 21 июля 2009

Вам не нужно думать о побеге в 1.0. Если у вас есть шаблон

<html>
 <body>
  & == &amp; in HTML
 </body>
</html>

Перед печатью следует кодировать от & до &amp;.

Если у вас есть переменная

<html>
 <body>
  {{ msg }}
 </body>
</html>

и

def view(request) :
  msg = "& == &amp; in HTML"

если должно быть напечатано таким же образом.

Единственный раз, когда вы хотите сделать кодировку самостоятельно, это если вам нужно вставить в сырой HTML. Как:

def view(request) :
  msg = '<img src="http://example.com/pretty.jpg" />This picture is very pretty'

и в вашем шаблоне

<html>
 <body>
  {{ msg|safe }}
 </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...