2010-04-30 3 views
0

Я пытаюсь создать связь между «таблицами» с Appengine/Python. Представьте, что у меня есть «таблица» для элементов и таблица для цветов. Я сохраняю цвет элемента, сохраняя ключ цвета в качестве атрибута элемента.Проблема сравнения ключей в 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}} нет?

+0

'Model.key () 'является методом –

ответ

0
{% if color.key = item.colorKey %} 

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

+0

Возможно, вам придется использовать' {% ifequal color.key item.colorKey%} '- Я не уверен, какая версия Django поставляется с App Engine. –

+0

@Jason Hall: Django 0.96.1 –

+0

Похоже, что это ново в последней версии разработки - http://docs.djangoproject.com/en/dev/ref/templates/builtins/#operator –

0

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

+0

true только для старого django, текущие шаблоны имеют поддержку операторов сравнения –

1

Действительно. 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 %} 
Смежные вопросы