.on()
- рекомендуемый способ выполнения всех привязок событий к jQuery 1.7. Он переводит все функции как .bind()
, так и .live()
в одну функцию, которая изменяет поведение, когда вы передаете ему разные параметры.
Как вы написали свой пример, между ними нет никакой разницы. Оба привязывают обработчик к событию click
в #whatever
. on()
предлагает дополнительную гибкость, позволяя вам делегировать события, запущенные детьми из #whatever
, в одну функцию обработчика, если вы выберете.
// Bind to all links inside #whatever, even new ones created later.
$('#whatever').on('click', 'a', function() { ... });
Я нашел "более хорошее" / "лучшее" решение для получения переменных в не самый хороший путь, но это работает.
Вы устанавливаете пользовательский фильтр в django, который заставляет ключ Вашего dict в качестве параметра
заставлять его работать в механизме приложения Google, необходимо добавить файл к основному каталогу, я назвал мой django_hack.py, который содержит этот маленький кусочек кода
from google.appengine.ext import webapp
register = webapp.template.create_template_register()
def hash(h,key):
if key in h:
return h[key]
else:
return None
register.filter(hash)
Теперь, когда у нас есть этот файл, все, что мы должны сделать, говорят механизму приложения использовать его..., что мы делаем это путем добавления, что эта небольшая строка в основной файл
webapp.template.register_template_library('django_hack')
и в шаблонном представлении добавляет, что этот шаблон вместо обычного кода
{{ user|hash:item }}
И должен работать отлично =)
Я предполагаю, что часть, не работает, {{ user.item }}
.
Django будет пробовать поиск по словарю, но использовать строку "item"
а не значение item
переменная цикла. Django сделал то же самое, когда оно решило {{ user.name }}
к name
атрибут эти user
объект, вместо того, чтобы искать переменную, названную name
.
я думаю, что необходимо будет сделать некоторую предварительную обработку данных в представлении перед рендерингом его в шаблоне.
не был должен это:
{{ user.item }}
быть этим?
{{ item }}
нет никакого пользовательского объекта в контексте в том цикле....?
@Dave Webb (я еще не получил достаточно высокого рейтинга, чтобы комментировать)
Поиск точек можно резюмировать следующим образом: когда система шаблонов встречает точку в имени переменной, он пытается выполнить следующие поиски в таком порядке:
* Dictionary lookup (e.e., foo["bar"])
* Attribute lookup (e.g., foo.bar)
* Method call (e.g., foo.bar())
* List-index lookup (e.g., foo[bar])
Система использует первый работающий тип поиска. Это логика короткого замыкания.
В качестве замены k, v в user.items в Google App Engine с использованием шаблонов django, где user = {'a': 1, 'b', 2, 'c', 3}
{% for pair in user.items %}
{% for keyval in pair %} {{ keyval }}{% endfor %}<br>
{% endfor %}
a 1
b 2
c 3
пара = (ключ, значение) для каждого элемента словаря.
Или вы можете использовать систему django по умолчанию, которая используется для разрешения атрибутов в tempaltes, например:
from django.template import Variable, VariableDoesNotExist
@register.filter
def hash(object, attr):
pseudo_context = { 'object' : object }
try:
value = Variable('object.%s' % attr).resolve(pseudo_context)
except VariableDoesNotExist:
value = None
return value
Это просто работает
в вашем шаблоне:
{{ user|hash:item }}