将Django与Ajax库集成的“最佳”方式

显然,马匹用于课程,但是将javascript库与一个Django应用程序集成的一些好方法是什么?

我打算使用jQuery,主要是因为它看起来很流行并且看起来很强大(但我对其他建议持开放态度)。

是否有非常有用或必不可少的python端库? 或者最简单的方法是创建JSON视图,并手动编写javascript(使用适当的javascript框架)?

我(简要地)看过Dajax,但是基于很少的文档,我不清楚它真的给了我很多。 我当然更喜欢带有更多文档的东西。

这里的其他答案表明,pjax并不一定适用于许多浏览器,所以这样做。

编辑:谢谢大家。 我将看tastypie来简化暴露一些json视图,然后手动编写一些javascript(今年早些时候做了一点点,看起来比90年代后期要好得多)。

在python方面,我建议看看pistontastypie

(从我自己的AJAX + Django开始,我也找到了Dajax,但是对我来说更像是’unix-way’,不喜欢这些一体化解决方案。虽然活塞很长时间没有更新现在,所以我推荐tastypie ,这是积极维护的。)

编辑。 还有一个类似的项目, django-rest-framework 。 从来没有使用它,它是新的。

基本上,这些库可以帮助您为模型创建一个完全可用的读写API,因此您可以通过HTTP从您的JavaScript执行create-read-update-delete操作。 您无需定义任何视图或序列化程序。 相反,我认为你定义资源 ,这是一个不错的抽象。

它通常只需几行代码,特别是如果您的资源与模型相关联。

但是,如果您需要更复杂的东西,可以重新考虑您的设计写下您的观点。 使用基于类的视图,它也非常简单。 例如,看一下这个片段 。

记住,仅仅因为它是ajax并不意味着你需要返回一个json转储。 您确实可以返回渲染的模板。

确实,’正确的方法’是用javascript构建你的所有标签,并用json数据填充那些数据,但让我们面对它,这就是臀部的痛苦…以至于它们是如此开发一个jquery模板语言。

您也不能只转储查询集。 您需要手动构建json数据。 所有这些教程和建议似乎都掩盖了这一事实。 来自django文档:

 def convert_context_to_json(self, context): "Convert the context dictionary into a JSON object" # Note: This is *EXTREMELY* naive; in reality, you'll need # to do much more complex handling to ensure that arbitrary # objects -- such as Django model instances or querysets # -- can be serialized as JSON. return json.dumps(context) 

我所做的实际上是为基于新类的视图编写一个mixin,它可以选择模板,这取决于它是否是一个ajax页面加载。 然后我将我想要的片段放在一个片段中,在另一个包装器模板中,扩展base.html并包含片段模板。

 class AjaxTemplateMixin(TemplateResponseMixin): ajax_template_name = None def get_template_names(self): if self.ajax_template_name and self.request.is_ajax(): self.template_name = self.ajax_template_name return super(AjaxTemplateMixin, self).get_template_names() 

这允许我只编写一次模板,然后无需在javascript中手动构造dom元素。 这是非常少的额外工作,特别是如果你不写api,那就是要走的路。

我建议你只需创建自己的javascript和AJAX视图。 Ruby on Rails长期以来遇到了相反的问题:迫使人们以某种​​方式做AJAX,这对人们来说总是一个冲突点。 最近,他们终于意识到了他们的愚蠢,并将AJAX与框架分离,因此您可以轻松使用您喜欢的任何库。

这是Django的一个function。 这似乎更难,但相信我,它最终会无限制地控制端到端。

我总是创建自己的视图来提供JSON,并自己编写JavaScript(通常使用jQuery)。 显然,这一切都取决于你想要做什么 – 如果有一个特定的需求你已经得到了现有的应用程序解决,那么一定要使用它。

提供JSON非常简单(只需转储一些JSON并将其作为HttpResponse返回),如下所示:

 def get_user_ids(request): if not request.is_ajax(): raise Http404 return HttpResponse(simplejson.dumps({'ids': [u.pk for User.objects.all()]})) 

上面的代码旨在说明,我不是建议您创建一个显示所有用户ID的视图。

Dajax很直接。 你最好告诉我们更多关于你在Dajax的谜题。