2012-04-14 106 views
0

我正在使用jquery表单插件http://jquery.malsup.com/form/#ajaxForm上传图像通过ajax到在Django中编程的服务器端。上传图像时,会自动将背景更改为该图像。一切都很完美(图像存储在数据库中,响应返回),但如何用该responseText更新css。jquery - 更新背景css

这里是我的javascript代码:https://gist.github.com/2381991

Django的响应:

url('home/nirmal/try/files/background/monalisa.jpg') 

Django的views.py:

@login_required 
def backgroundview(request): 
    if request.is_ajax(): 
     form = BackgroundModelForm(request.POST, request.FILES) 
     if form.is_valid(): 
      try: 
       g = BackgroundModel.objects.get(user=request.user) 
      except BackgroundModel.DoesNotExist: 
       data = form.save(commit=False) 
       data.user = request.user 
       data.save() 
      else: 
       g.background = request.FILES['background'] 
       g.save() 
      return HttpResponse("url('"+g.background.url+"')") 
    else: 
     form = BackgroundModelForm() 
     return render_to_response("cover.html", {'form': form}, context_instance=RequestContext(request)) 

我不知道如何更新的CSS:背景 - image:url()在jquery中。 任何人都可以帮助我吗?

谢谢!

回答

2

在jQuery的形式插件showResponse方法回调,只是选择元素,你想的背景图像适用,而且使用的CSS方法来设置背景图片:

$("#some_element_id").css("backgroundImage", "url('/relative/address/to/image.jpg')"); 

注意:将需要使用相对于web根目录的映像的路径,而不是您的主目录。

1

首先,什么MIME类型响应客户端的jQuery期待?您的代码在HttpResponse中返回text/html,您可以.css('background-image', response_data)

其次,g.background.url看起来不正确,您的MEDIA_URL在设置中是什么?

此外,请检查您的问题Model has no attribute _committed,g.background = request.FILES['background']这里不检查图像类型,并可能允许任何类型的文件上传和存储。

+0

我可以用这个g.background = form.save(提交= FALSE)装置技术领域进行的ModelForm?如何检查Imagetype? – rnk 2012-04-14 05:01:51

+0

My MEDIA_URL ='http:// localhost:8000/files'MEDIA_ROOT ='home/try/files /' – rnk 2012-04-14 05:04:34

+0

@mk update'MEDIA_URL'to''/ files /'','MEDIA_ROOT' to''/ home /尝试/文件',因为它是一个绝对路径。 – okm 2012-04-14 05:15:57