К сожалению, это невозможно при использовании стандартного движка шаблонов Django. Вам нужно будет написать что-то ужасное, чтобы подражать переключателю.
{% if a %}
{{ a }}
{% else %}
{% if b %}
{{ b }}
{% else %}
{% if c %}
{{ c }}
{% else %}
{{ default }}
{% endif %}
{% endif %}
{% endif %}
или если только один, если условие может быть истинным, и вам не нужно значение по умолчанию.
{% if a %}
{{ a }}
{% endif %}
{% if b %}
{{ b }}
{% endif %}
{% if c %}
{{ c }}
{% endif %}
Обычно, когда движок шаблонов недостаточно мощный, чтобы выполнить то, что вам нужно, это признак того, что код следует переместить в представление Django, а не в шаблон. Например:
# Django view
if a:
val = a
elif b:
val = b
elif c:
val = c
else:
val = default
# Template
{{ val }}
Вы можете объединить обработчик событий keypress
с setTimeout
, чтобы вы отправляли запрос Ajax через заданное время после нажатия клавиши, отмены и перезапуска таймер, если еще одно нажатие клавиши происходит до окончания таймера. Предполагая, что у вас есть текстовое поле с идентификатором myTextArea и функция обратного вызова Ajax с именем doAjaxStuff
:
function addTextAreaCallback(textArea, callback, delay) {
var timer = null;
textArea.onkeypress = function() {
if (timer) {
window.clearTimeout(timer);
}
timer = window.setTimeout( function() {
timer = null;
callback();
}, delay );
};
textArea = null;
}
addTextAreaCallback( document.getElementById("myTextArea"), doAjaxStuff, 1000 );
Я бы лично использовал setInterval
, который отслеживал бы изменения в текстовой области и выполнял бы обратные вызовы AJAX только при обнаружении внесенных изменений. каждая секунда должна быть быстрой и достаточно медленной.
Если вас интересуют решения jQuery, jQuery Suggest - хорошая реализация.
Нет смысла каждый раз изобретать колесо.
Другая альтернатива - использовать небольшой плагин jQuery под названием bindWithDelay. Он использует ту же технику setTimeout, что и принятый ответ, но обрабатывает таймауты прозрачно, так что ваш код будет немного легче читать. исходный код можно посмотреть на github.
$("#myTextArea").bindWithDelay("keypress", doAjaxStuff, 1000)