【发布时间】:2012-05-23 11:42:09
【问题描述】:
我正在开发一个 Web 应用程序,但我遇到了一个功能问题。您可以在这里查看http://qlimp.com 您也可以将其用于用户名/密码:dummy/dummy
登录后,请点击链接转到封面设置您将看到一个调色板,您可以在其中上传图片,输入一些文字。
当您上传图片时,我在 jQuery 中编写了一个 ajax 请求,它将图片上传到服务器并显示该图片的全页背景预览。
jQuery
$('#id_tmpbg').live('change', function()
{
$("#ajax-loader").show();
$("#uploadform").ajaxForm({success: showResponse}).submit();
});
function showResponse(responseText, statusText, xhr, $form) {
$.backstretch(responseText)
$("#ajax-loader").hide();
}
所以这里的问题是,当我上传图片时,它会显示
ValueError at /cover/
The view cover.views.backgroundview didn't return an HttpResponse object.
Request Method: POST Request URL: http://qlimp.com/cover/
我实际上是在视图中返回 HttpResponse 对象。
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:
if g.tmpbg != '' and g.tmpbg != g.background:
image_path = os.path.join(settings.MEDIA_ROOT, str(g.tmpbg))
try:
os.unlink(image_path)
except:
pass
data = BackgroundModelForm(request.POST, request.FILES, instance=g).save()
return HttpResponse(data.tmpbg.url)
else:
form = BackgroundModelForm()
return render_to_response("cover.html", {'form': form}, context_instance=RequestContext(request))
模型.py:
class BackgroundModel(models.Model):
user = models.OneToOneField(User)
background = models.ImageField(upload_to='backgrounds', null=True, blank=True)
tmpbg = models.ImageField(upload_to='backgrounds', null=True, blank=True)
class BackgroundModelForm(ModelForm):
class Meta:
model = BackgroundModel
exclude = ('user','background')
但是这些东西在我的电脑上运行(保存图像并显示背景预览),但在生产服务器上却不行。为什么会这样? 我已将相同的代码上传到服务器。
谁能帮帮我?谢谢!
【问题讨论】:
-
你在本地使用哪个操作系统,哪个用于生产?
-
两者都是 Ubuntu。我在生产中使用 Ubuntu 12.04
-
表单是否有效?查看代码如果 form.is_active() 为 False,则不返回任何内容。
-
我不确定这是否可行,但尝试在每种情况下都返回 HttpResponse。就像你没有写 [ if form.is_valid() ] 的 else 部分,所以写 else 部分并返回 HttpResponse。你正在发出 ajax 请求,所以首先将 render_to_string 存储在某个字符串变量中,然后将该变量返回为 [ return HttpResponse(stringvariable) ].
-
@Mikael 我希望它正在验证,因为我的开发服务器没有问题。还有一些我在生产中遇到的问题。为什么从开发到生产会有这种差异?
标签: javascript jquery python django