我想知道控制器 - 比如下面的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中会更难/更冗长?
“替换_html”调用确实让Rails变得简单 - 我希望在Django中有一个简单的等价物。
另外,Django是否具有'部分'的概念 - 就像Rails一样?
答案 0 :(得分:3)
Rails中的“page.replace_html”实际上是RJS的一种表现形式 - 即由服务器生成的Javascript(以及发送的正确MIME类型等),然后客户端获取该块Javascript并插入它DOM中的某个地方(可能会替换DOM ID指定的其他元素)。所以它真的需要2个协调:服务器端将Javascript发送回客户端,然后客户端接收并根据接收到的数据进行操作。
我不知道Django是否支持这个,但你最好不要搜索“rjs django”之类的内容,因为基本上你正在寻找Django中的RJS等价物。
答案 1 :(得分:2)
Rails喜欢抽象客户端实现细节,并试图使其看起来像服务器端问题。 Django假设您已经拥有自己的客户端AJAX技术,并且只是为您提供所需的任何服务器端支持。
不同的哲学(Django从不尝试为您编写HTML或Javascript,除非在最琐碎的情况下)。
典型的解决方案是使用JQuery或其他任何方式来生成正常的HTTP请求,然后根据需要将HTML或JSON响应插入到DOM中(这通常是JQuery中的一个内容)。
只需使用普通的Django视图和模板即可创建响应。
答案 2 :(得分:2)
目前Django仅是服务器端框架。因此,您需要使用一些Javascript框架来帮助您完成此任务。
像JQuery这样的框架有一个.load()方法,你只需要将HTML插入到DOM中,就可以从Django视图中获取任何响应,字符串消息或复杂的HTML,并将其嵌入到页面中。
------ 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")
简短的回答,没有相应的,你必须自己写。
答案 3 :(得分:0)
我不会在Django中通过视图函数(服务器端代码)控制页面的特定部分。
你在view函数中最接近的事情是返回纯文本而不是html(或以JSON格式返回数据),然后你必须在发送请求的模板文件(显示html)中使用Javascript在收到响应后,决定要操作的DOM的哪些部分(或其他要做的事情)
<强>更新强>
如果你习惯以这种方式编程,你可以考虑编写一个小的javascript框架来处理像这样的典型任务,
(实际上我开始喜欢这个想法,可能会自己实现!!)