Оператор ==
проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals()
проверьте фактическое содержимое строки (значение).
Обратите внимание, что метод .equals()
принадлежит классу Object
(суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.
String s1 = "Stack Overflow";
String s2 = "Stack Overflow";
s1 == s2; //true
s1.equals(s2); //true
Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле. String s1 = new String("Stack Overflow");
String s2 = new String("Stack Overflow");
s1 == s2; //false
s1.equals(s2); //true
Причина. Если вы создаете объект String с использованием ключевого слова new
, ему выделяется отдельное пространство в куче. Вы можете использовать метод dict.items ()
для получения элементов словаря:
<table>
<tr>
<td>author</td>
<td>qty</td>
<td>Amount</td>
</tr>
{% for author, values in data.items %}
<tr>
<td>{{author}}</td>
{% for v in values.0 %}
<td>{{v}}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
К сожалению, шаблоны django не работают с кортежами Python. Таким образом, использование в шаблоне «для автора, значений» незаконно. Вместо этого вы должны получить доступ к значениям кортежа или массива по их индексу, используя «.index», как в «tuple.0» и «tuple.1».
<table>
<tr>
<td>author</td>
<td>qty</td>
<td>Amount</td>
</tr>
{% for entry in data.items %}
<tr>
<td>{{entry.0}}</td>
{% for v in entry.1 %}
<td>{{v}}</td>
{% endfor %}
</tr>
{% endfor %}
</table>