Django ajax——当我使用 Ajax、Django 发送表单时为空 request.FILE

Posted

技术标签:

【中文标题】Django ajax——当我使用 Ajax、Django 发送表单时为空 request.FILE【英文标题】:Django ajax-- Empty request.FILE when I am sending a form with Ajax, Django 【发布时间】:2013-09-24 17:44:27 【问题描述】:

我正在使用 Django 1.5.2、jQuery v1.9.0 和 POSTGRESQL 9.1。

我正在使用 ajax 发送表单,但 requst.FILE 为空,imgen 未发送。

这是我的文件。

模型.py

class Evento(models.Model):
    nombre            = models.CharField(max_length=16)
    def __unicode__(self):
        return self.nombre 

class Imagen(models.Model):    
    def url(self,filename):
        ruta = "MultimediaData/Evento/%s/%s"%(self.evento.id,str(filename))
        return ruta
    evento = models.ForeignKey(Evento)
    photo = models.ImageField(upload_to=url)

    def __unicode__(self):
        return str(self.photo) 

URSL.py

urlpatterns = patterns('CasadeAna.apps.home.views',        
        url(r'^addevento/$','addevent_view',name='event_add'), 
        url(r'^editevento/(?P<idevento>.*)/$','editevent_view',name='event_edit'), 
)         

查看.py

def editevent_view(request,idevento):

        if request.method == 'GET' and request.is_ajax():
            formulario = FormImagen()
            ctx = 'form':formulario
            return render_to_response('home/event/imagenform.html',ctx,context_instance=RequestContext(request))

        elif request.method == 'POST' and request.is_ajax():
            print 'dasd'
            print request.POST
            print request.FILES 
            print 'dasd'
            formulario =  FormImagen(request.POST,request.FILES)

            if formulario.is_valid():
                formulario.save()
                return HttpResponse('very good')         
            else:
                ctx = 'form':formulario
                return render_to_response('home/event/imagenform.html',ctx,context_instance=RequestContext(request))

        elif request.method == 'GET':
            evento = Evento.objects.get(id=idevento)
            ctx = 'evento':evento
            imagen = Imagen.objects.filter(evento=evento)
            return render_to_response('home/event/editEvent.html',ctx,context_instance=RequestContext(request))

HTML

表格

imagenform.html

<form id="formulario" method="POST" enctype="multipart/form-data">
        % csrf_token %
        form.as_p
        <button type="submit"class="btn btn-primary" onClick="enviar(this);">Guardar</button>
        <button type="reset" class="btn btn-primary">Limpiar</button>
</form>

editEvent.html

 % extends 'base.html' %
% block menu %
% endblock %
% block  content %
<div style="height:100%;"  align="left" >
    <h1 class="muted"> Editar Imagenes </h1>
  <h2>evento.nombre</h2>
    <div id="imagenes">
        <div id="menu" >
            <button class="btn" onClick="subirImagen(this);">Agregar Imagen <i class="icon-plus"></i></button>
        <div>           
        <div id="contenedor">
            <ul class="thumbnails">
            % if  imagen %
                % for i in imagen %
                     <li class="span4">
                        <img data-src="i.photo" >
                    </li>
                % endfor %
            % endif %
        </ul>
        </div>
    </div>
 </div>
% endblock %
% block js %
 <script type="text/javascript">
    //pedir formulario para subir una imagen 
    function subirImagen(e)
    
        $.ajax(
              url: '/editevento/14/',
              type: 'GET',
              dataType: 'html',
              success: function(datos)
                   $('#contenedor').empty();
                   $('#contenedor').append(datos);
                
            );
    
  function enviar(e)
  
        $('#formulario').submit(function(evento)
            evento.preventDefault();
            var datos_formulario = $(this).serialize();        
            alert('event444os');
            $.ajax(
                url: '/editevento/14/',
                data: datos_formulario,
                type: 'POST',
                dataType: 'html',
                processData:false,
                cache:false,
                success: function(datos)
                    $('#contenedor').empty();
                    $('#contenedor').append(datos);
                
            );
        );
    
 </script>
% endblock %

提交表单 request.post 值和文件是 请求.POST

请求.文件

请帮忙!!

【问题讨论】:

【参考方案1】:

您不能发布这样的文件。看看这个问题:How can I upload files asynchronously? 或这个问题:jQuery ajax post file field

【讨论】:

您的解释能更具体一点吗?链接很有帮助,但更有用的是实际解释为什么不能发布像“this”这样的文件,无论“this”是什么。

以上是关于Django ajax——当我使用 Ajax、Django 发送表单时为空 request.FILE的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试使用 AJAX 将已呈现的 Django 模板注入我的页面的一部分

学习随笔:Vue.js与Django交互以及Ajax和axios

我想知道为啥当我发送一个数组以使用 jquery ajax (django,jquery) 查看时发生错误

使用 ajax 和 django 传递信息

如何在 Django 中使用 jQuery/Ajax 发布?

使用 Django 实现 ajax 表单