【问题标题】:What's Django's equivalent of "replace_html" in Rails?Rails 中 Django 的“replace_html”等价物是什么?
【发布时间】:2010-10-03 16:58:17
【问题描述】:

我想知道在异步表单提交后执行页面的 ajax 更新(假设以下是正确的),在 Django 中的控制器(例如以下 Rails 控制器)会是什么样子:

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 一样?

【问题讨论】:

    标签: ruby-on-rails ajax django


    【解决方案1】:

    Rails 中的“page.replace_html”实际上是 RJS 的一种表现形式——即由服务器生成的 Javascript(并发送正确的 MIME 类型等),然后客户端获取该 Javascript 块并将其插入DOM 中的某处(可能替换由 DOM ID 指定的其他一些元素)。所以它确实需要 2 个协调:服务器端将 Javascript 发送回客户端,然后客户端接收并处理接收到的数据。

    我不知道 Django 是否支持这一点,但你最好在谷歌上搜索“rjs django”之类的东西,因为本质上你正在寻找 Django 中的 RJS 等价物。

    【讨论】:

      【解决方案2】:

      Rails 喜欢抽象客户端的实现细节,并试图让这看起来像是服务器端的问题。 Django 假设您已经拥有自己的客户端 AJAX 技术,并且只是为您需要的任何服务器端支持提供便利。

      不同的理念(Django 从不尝试为您编写 HTML 或 Javascript,除非在最微不足道的情况下)。

      典型的解决方案是使用一点 JQuery 或其他任何东西来发出正常的 HTTP 请求,然后根据需要将 HTML 或 JSON 响应插入到 DOM 中(这通常是 JQuery 中的单行)。

      只需使用普通的 Django 视图和模板来创建您的响应。

      【讨论】:

        【解决方案3】:

        目前 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")
        

        简短的回答,没有等效的,您必须自己编写。

        【讨论】:

          【解决方案4】:

          我没有在 Django 中通过视图函数(服务器端代码)控制页面的特定部分的任何东西。

          您可以在视图函数中做的最接近的事情是返回纯文本而不是 html(或者,返回 JSON 格式的数据),然后您必须在发送请求的模板文件(显示 html)中使用 Javascript 和收到响应后,决定要操作 DOM 的哪些部分(或要做哪些其他事情)

          更新

          如果你习惯用这种方式编程,你可能会考虑写一个小的 javascript 框架来处理这样的典型任务,

          (其实我开始喜欢这个想法,可能会自己实现它!)

          【讨论】:

            猜你喜欢
            • 2014-02-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-10
            • 1970-01-01
            • 2010-11-17
            相关资源
            最近更新 更多