【问题标题】:django - valueErrordjango - 值错误
【发布时间】: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


【解决方案1】:

如果表单有效,您不会返回响应。

【讨论】:

  • 这是什么HttpResponse()
  • 外部if的真实情况;有两个if,对于外部if,这两个条件都有返回值,但内部if 不会在所有执行路径上返回HttpResponse
  • 我需要做哪些改变?我给出的代码在我的电脑上运行。
  • 您可以将倒数第二行放在顶部附近...form = BackgroundModelForm(),去掉最后一行else 并将最后一行移到左侧(取消缩进)... .return render_to_response( ...
  • @BurhanKhalid 我在生产中使用 sqlite3。这会产生这个问题吗?因为生产中的每个代码都可以在我的计算机上完美运行。
猜你喜欢
  • 2023-04-07
  • 2020-04-08
  • 2019-04-26
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 2015-02-17
相关资源
最近更新 更多