Hi Steve, On 04/07/2016 04:36 PM, Stephen Kelly wrote: > Anyway, that makes at least two people telling me that > > In [81]: "True" is "True" > Out[81]: True > > and > > In: t = e.from_string( > "{% if \"True\" is \"True\" %}yes{% else %}no{% endif %}") > In: t.render(c) > > Out: 'no' > > is 'the same behavior' and seems to be what you expect.
The point is that you shouldn't ever expect any consistent behavior when using `is` with strings (whether in Python code or in Django templates), because that behavior is not defined by the Python language, it's implementation dependent. It happens that the CPython implementation interns short string literals, so they are the same object in memory, but this doesn't happen for longer strings, or strings that aren't generated from literals. Those "string literals" in the Django template are not string literals from Python's perspective, so they are not interned, so they are not the same object. There's no reasonable way to "fix" this, because there is no reliable Python behavior to try to match. Any fix would just be encouraging use of `is` with strings; the right answer is "never use `is` with strings" (or with integers, for exactly the same reasons). In other words, the value of `"string" is "string"` in Python is effectively accidental and almost certainly useless (it does correctly and reliably tell you whether the two string objects are the same object, but for immutable objects this information is performance-optimization-dependent and useless), so there is no "correct" behavior here for the DTL to match. Carl -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at https://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/5706E49B.6080302%40oddbird.net. For more options, visit https://groups.google.com/d/optout.
signature.asc
Description: OpenPGP digital signature