Что Django эквивалентно «replace_html» в Rails? - PullRequest
1 голос
/ 27 января 2009

Мне интересно, как контроллер - такой как следующий контроллер Rails - будет выглядеть в Django, чтобы выполнить обновление страницы ajax после асинхронной отправки формы (при условии, что следующее правильно):

def create
@omelet = Omelet.new(params[:omelet])
render :update do |page|
  if @omelet.save
    page.replace_html 'notice', 'Omelet was successfully cooked'
  else
    page.replace_html 'notice', 'Sorry - the omelet could not be cooked'
  end
  page.replace_html 'omelets', :partial => 'meals/omelet_list',
    :locals => {:omelets =>  @omelet.meals.omelets }
end

конец

Я понимаю, что Django не имеет таких же встроенных библиотек ajax. Означает ли это, что что-то похожее на вышесказанное будет гораздо сложнее / более многословно в Django?

Вызовы replace_html действительно облегчают работу в Rails - я надеюсь, что в Django есть простой эквивалент.

Кроме того, есть ли в Django понятие «частичные» - как в Rails?

Ответы [ 4 ]

3 голосов
/ 27 января 2009

«page.replace_html» в Rails действительно является проявлением RJS - то есть Javascript, который генерируется сервером (и отправляется правильный тип MIME и т. Д.), А затем клиент берет этот кусок Javascript и вставляет его где-то в DOM (возможно, заменив какой-либо другой элемент, указанный в DOM ID). Таким образом, на самом деле требуется 2 согласования: на стороне сервера, чтобы отправить Javascript обратно клиенту, а затем клиенту для получения и обработки полученных данных.

Я не знаю, поддерживает ли Django это, но вам лучше поиграть в поиски "rjs django" и т. П., В сущности, вы ищете эквивалент RJS в Django.

2 голосов
/ 28 января 2009

В настоящее время Django является только серверной платформой. Так что вам нужно будет использовать некоторые Javascript Framework, чтобы помочь вам с этой задачей.

Фреймворки, такие как JQuery, имеют метод .load (), в котором вы можете просто вставить HTML в DOM, вы можете получить любой ответ, строковое сообщение или сложный HTML из представления Django и вставить его на свою страницу.

------ HTML ------
<div id="message"></div>
<input class="button" value="Get message"/>

------ Javascript -------
$("input").click(function(){
  $("#message").load("/get_message/");
});

------ Django view ------
def get_message(request):
  return HttpResponse("Your message")

Краткий ответ, эквивалента нет, вам придется написать свой.

2 голосов
/ 27 января 2009

Rails любит абстрагировать детали реализации на стороне клиента и пытается сделать так, чтобы это было проблемой на стороне сервера. Django предполагает, что у вас уже есть свои собственные методы AJAX на стороне клиента, и просто облегчает любую необходимую поддержку на стороне сервера.

Различные философии (Django никогда не пытается написать ваш HTML или Javascript для вас, за исключением самых тривиальных случаев).

Типичным решением было бы немного JQuery или что-то еще, чтобы сделать обычный HTTP-запрос, а затем вставить ответ HTML или JSON в DOM, как требуется (обычно это один слой в JQuery).

Просто используйте обычные представления и шаблоны Django, чтобы создать свой ответ.

0 голосов
/ 27 января 2009

У меня нет ничего в Django, где вы управляете определенными частями страницы с помощью функций просмотра (код на стороне сервера).

Самое близкое, что вы можете сделать в функции представления, это вернуть простой текст вместо html (или вернуть данные в формате JSON), тогда вам придется использовать Javascript в файле шаблона (который отображает html), который отправляет запрос после получения ответа решает, какими частями DOM следует манипулировать (или какие другие действия необходимо выполнить)

UPDATE

Если вы привыкли программировать таким образом, вы можете написать небольшую инфраструктуру javascript, которая обрабатывает типичные задачи, подобные этой,

(на самом деле мне начинает нравиться эта идея, возможно, она сама будет реализована !!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...