mintchaos / typogrify

A set of Django template filters to make caring about typography on the web a bit easier.
http://static.mintchaos.com/projects/typogrify/
Other
168 stars 29 forks source link

Bizarre __unicode__()-related issue #41

Open evildmp opened 9 years ago

evildmp commented 9 years ago

I've used {{ item|typogrify }} without issue a billion times if not more, but today I discovered a problem that has me completely baffled.

Here are two absolutely identical model methods:

def blah(self):
    return self.destination_content_object.__unicode__()

def __unicode__(self):
    return self.destination_content_object.__unicode__()

Now if in my template I do {{ item.blah|typogrify }}, it'll work perfectly. If I do the same with {{ item|typogrify }}, there's a template error.

This is the weird thing:

And when it doesn't get called, what happens is that the typogrify tags, instead of receiving the unicode that they expect, receive a model object that they naturally choke on.

So it seems to me that typogrify is somehow intercepting the contents of the template before Django is able to turn the {{ item }} into unicode, if that makes sense.

(Just to add to the complexity of this, the template belongs to a django CMS plugin, which has a habit of swallowing up errors and making them harder to debug.)

evildmp commented 9 years ago

Problem identified: {% autoescape off %} was the cause.

On the other hand, I do find that I need to turn off autoescaping all over the place in order to get typogrify to trigger. It's not really clear to me what is preventing it from doing so though.