Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

[1.4.x] Fixed #13608 - Noted that template lookups use literal values.

Backport of 74c025d from master.
  • Loading branch information...
commit c2f1aa5a3c605927f1fb86c0d4eaa9f9067a0313 1 parent c088a42
@timgraham timgraham authored
Showing with 20 additions and 0 deletions.
  1. +4 −0 docs/ref/templates/api.txt
  2. +16 −0 docs/topics/templates.txt
View
4 docs/ref/templates/api.txt
@@ -122,6 +122,10 @@ dot in a variable name, it tries the following lookups, in this order:
* Attribute lookup. Example: ``foo.bar``
* List-index lookup. Example: ``foo[bar]``
+Note that "bar" in a template expression like ``{{ foo.bar }}`` will be
+interpreted as a literal string and not using the value of the variable "bar",
+if one exists in the template context.
+
The template system uses the first lookup type that works. It's short-circuit
logic. Here are a few examples::
View
16 docs/topics/templates.txt
@@ -97,6 +97,18 @@ Use a dot (``.``) to access attributes of a variable.
* Method call
* List-index lookup
+ This can cause some unexpected behavior with objects that override
+ dictionary lookup. For example, consider the following code snippet that
+ attempts to loop over a ``collections.defaultdict``::
+
+ {% for k, v in defaultdict.iteritems %}
+ Do something with k and v here...
+ {% endfor %}
+
+ Because dictionary lookup happens first, that behavior kicks in and provides
+ a default value instead of using the intended ``.iteritems()``
+ method. In this case, consider converting to a dictionary first.
+
In the above example, ``{{ section.title }}`` will be replaced with the
``title`` attribute of the ``section`` object.
@@ -104,6 +116,10 @@ If you use a variable that doesn't exist, the template system will insert
the value of the :setting:`TEMPLATE_STRING_IF_INVALID` setting, which is set
to ``''`` (the empty string) by default.
+Note that "bar" in a template expression like ``{{ foo.bar }}`` will be
+interpreted as a literal string and not using the value of the variable "bar",
+if one exists in the template context.
+
Filters
=======
Please sign in to comment.
Something went wrong with that request. Please try again.