Обновить значения формы в Django без перезагрузки страницы? - PullRequest
0 голосов
/ 10 июля 2011

В настоящее время я работаю над проектом в Django, и в настоящее время я работаю над формой, которая включает в себя несколько элементов. Каждый элемент является динамическим, и его параметры должны обновляться, когда элемент над ним меняет значение. Я знаю, что могу использовать AJAX для обновления содержимого элементов всякий раз, когда значение другого изменяется, но мне было интересно, есть ли способ Django, или в любом случае сделать это на стороне сервера? Моя главная цель - сделать это, не перезагружая всю страницу каждый раз, любая обратная связь приветствуется. Спасибо!

Обновление: мой вопрос очень похож на Форма Ajax Django, зависимость от полей выбора Но я не до конца понимаю, что происходит в ответе. Если бы кто-то мог объяснить это чуть более подробно, это решило бы все мои проблемы на данный момент. Я пытаюсь ответить на этот ответ, но при загрузке я получаю 500 и 403 ошибки.

Follow Up: Очевидно, все мои проблемы были связаны с устаревшей библиотекой jQuery, как только я обновил ее, все снова заработало!

1 Ответ

5 голосов
/ 10 июля 2011

AFAIK, нет канонического способа Django для работы с Ajax ... Но это просто чудесно - сделать это самостоятельно:

Сначала вы должны создать представление, которое возвращает все данные JSON, которые понадобятся для обновления.вид.Например, список городов в провинции:

from django.utils import simplejson as json

def list_cities(request):
    cities = city_names_in_province(request.GET["province"])
    return json.dumps(cities)

Во-вторых, вы должны вызвать это представление из HTML (при условии jQuery):

<select id="provinces">
    …
</select>

<select id="cities" disabled="true">
    <option>---</option>
</select>

<script>
$("#provinces").change(function() {
    var province = $(this).val();
    $.getJSON("{% url list_cities %}", { province: province }, function(cities) {
        var cities_select = $("#cities");
        … put the `cities` list into the `cities_select` …
    });
});
</script>

И, кроме«одевание» и проверка ошибок (например, что произойдет, если вызов list_cities не удастся?), это в основном все, что нужно сделать.

...