从Ajax获取html格式的Django表单

Get Django form in html from Ajax

本文关键字:Django 表单 格式 html Ajax 获取      更新时间:2023-09-26

我有一个django页面,里面有一个完整的日历。我的用例是,我想点击一个事件,它会打开一个弹出窗口来编辑它(该事件是django模型)。我想我找不到合适的关键词,因为我找不出任何简单的方法来做到这一点。理想情况下,我希望在我的视图文件中有一个get方法,它只返回html中的表单,我会在一个带有Ajax调用的fullcalendar回调中调用它,然后用它填充弹出框。

我不是网络专家,如果我的词汇不正确,很抱歉:-)。

干杯,Emmanuel

对于基于类的视图,您可以这样制作:

1) 通过ajax(JSON格式)为视图的返回内容编写AjaxMixin,并将其添加到所需的view中,返回表单

class LazyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Promise):
            return force_text(obj)
        return obj
class AjaxViewMixin(View):
    """
    A mixin that can be used to render a JSON response for CBV.
    """
    payload = {}
    def render_to_response(self, context, **response_kwargs):
        if self.request.is_ajax():
            html = render_to_string(self.template_name, context, context_instance=RequestContext(self.request))
            payload = {'success': True, 'html': html}
            payload.update(self.payload)
            response_kwargs['content_type'] = 'application/json'
            return HttpResponse(json.dumps(payload, cls=LazyEncoder), **response_kwargs)
        return super(AjaxViewMixin, self).render_to_response(context, **response_kwargs)

2) 在这样的html页面上:

$('open_form_button').on('click', function(e){
    e.preventDefault();
    $.post( '{% url 'view_which_return_form' %}' , function(data) {  //may use and get, no sense
        if (data.success) {
            $('#place_for_form').html($($.parseHTML(data.html,document,"true")).filter('*')) 
        }
    });
});

意识到这一点——您可以通过Ajax在变量"html"中返回呈现的表单块,并将其插入到所需位置。记住使用

$($.parseHTML(data.html,document,"true")).filter('*')  

对于返回的数据,或者返回块中的脚本无法正常工作。