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) 查看时发生错误