Проблема сравнения ключей в Appengine / Python - PullRequest
0 голосов
/ 30 апреля 2010

Я пытаюсь создать связь между "таблицами" с помощью Appengine / Python. Представьте, что у меня есть «таблица» для предметов и таблица для цветов. Я сохраняю цвет элемента, сохраняя цветовой ключ в качестве атрибута элемента.

Это работает хорошо, но этот фрагмент кода не работает:

<select id="colorKey" name="colorKey">
  {% for color in colors %}
    <option value="{{ color.key }}"{% if color.key = item.colorKey %} selected="selected"{% endif %}>
      {{ color.name }} - {{ item.colorKey }} - {{ color.key }}
    </option>
  {% endfor %}
</select>

Поскольку переменные {{item.colorKey}} и {{color.key}} фактически представляют собой одну и ту же цепочку символов, я могу думать только о проблеме с типами.

{{item.colorKey}} наверняка является строкой. Но, может быть, {{color.key}} нет?

Ответы [ 3 ]

1 голос
/ 18 января 2012

Действительно. color.key, вероятно, относится к экземпляру класса Key. {% ifequal %} пытается сравнить строку с объектом Key, и условие никогда не выполняется.

Django автоматически преобразует этот объект в строку, когда вы используете {{ color.key }}, но вы должны предоставить {% if equal %} фактическую строку.

Вы можете объявить новое свойство в вашем классе Color, которое возвращает ключ в виде строки, а затем использовать его с {% if equal %}

class Color(db.Model):  
    ...
    @property
    def keyasstring(self):
        return str(self.key())

Тогда в вашем шаблоне Django:

{% ifequal color.keyasstring item.colorKey %}
0 голосов
/ 01 мая 2010

Django не поддерживает произвольные выражения в тегах «если» (или что-либо еще в этом отношении). Вам нужно использовать тег 'ifequal' - подробности см. в документах .

0 голосов
/ 30 апреля 2010
 {% if color.key = item.colorKey %}

Слишком мало ==?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...