Шаблоны Django и переменные атрибуты

.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() { ... });
34
задан ydaetskcoR 17 July 2016 в 22:35
поделиться

6 ответов

Я нашел "более хорошее" / "лучшее" решение для получения переменных в не самый хороший путь, но это работает.

Вы устанавливаете пользовательский фильтр в 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 }}

И должен работать отлично =)

32
ответ дан Yon 27 November 2019 в 16:53
поделиться

Я предполагаю, что часть, не работает, {{ user.item }}.

Django будет пробовать поиск по словарю, но использовать строку "item" а не значение item переменная цикла. Django сделал то же самое, когда оно решило {{ user.name }} к name атрибут эти user объект, вместо того, чтобы искать переменную, названную name.

я думаю, что необходимо будет сделать некоторую предварительную обработку данных в представлении перед рендерингом его в шаблоне.

10
ответ дан Dave Webb 27 November 2019 в 16:53
поделиться

не был должен это:

{{ user.item }}

быть этим?

{{ item }}

нет никакого пользовательского объекта в контексте в том цикле....?

0
ответ дан Martijn Pieters 27 November 2019 в 16:53
поделиться

@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])

Система использует первый работающий тип поиска. Это логика короткого замыкания.

4
ответ дан 27 November 2019 в 16:53
поделиться

В качестве замены 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

пара = (ключ, значение) для каждого элемента словаря.

2
ответ дан 27 November 2019 в 16:53
поделиться

Или вы можете использовать систему 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 }}
8
ответ дан 27 November 2019 в 16:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: