django form ajax,在Django中动态添加表单到formset并使用AJAX提交

Django表单和表单集用于基于浏览器的经典数据发布 . 尽管它们绝对可以与Javascript一起使用,但是您希望从正常行为中分离得越多,它就越复杂 .

根据您的要求,您可能会开始考虑删除它并切换到Javascript REST endpoints . 当然,如果您需要渐进增强功能,并且您需要在没有javascript的情况下使用它,那么这不是一个选项 .

在任何情况下,您都希望有一个自定义视图用于从JS发布,以便您可以返回结果并在AJAX处理程序中轻松解析它 . 可能是一些JSON .

您可以采取几种方法 .

让您的AJAX将数据发送到其他URL . 如果您有API或计划在某个时刻构建一个API,这是相关的 . 因此,您的表单在正常提交时将执行旧式处理,但您的AJAX将与API endpoints 进行通信 .

例如,您的表单发送到 https://example.com/myform ,但您的Javascript代码在 https://example.com/api/v1/mymodel/ 处与REST api进行通信(根据需要发送PUT,POST和DELETE请求) .

或者如果你没有API并且构建一个似乎有点过分,你可能只是改变你的视图,因此它根据数据是以常规方式提交还是使用AJAX来不同地格式化其输出 .

你会这样做:

class MyFormView(.....):

def render_to_response(self, context, **kwargs):

if self.request.is_ajax():

return self.render_to_json(context, **kwargs)

return super().render_to_response(context, **kwargs)

def render_to_json(context, **kwargs):

data = {

# see below!

}

return HttpResponse(

content=json.dumps(data).encode('ascii'),

content_type='application/json',

)

这只是一个大纲 . 您需要确保 is_ajax 能够正确检测到它(请参阅django doc) . 并且您需要从 context 正确构建 data :将要发送回JS代码的内容解压缩并将它们放入dict中 .

你会发现's manageable if you just do this for one, maybe two views in your project, but very quickly you' ll想要一个小的API,特别是考虑到使用Django REST framework等软件包构建一个API是多么容易 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值