以前,我在下面的代码工作正常,并且ajaxSubmit请求已成功完成。
$(document).ready(function() {
$('#restaurant_photo_upload').submit(function() {
var options = {
clearForm: true // clear all form fields after successful submit
};
$(this).ajaxSubmit(options);
return false;
});
$('[name=upload_restaurant_photo_btn]').click(function(){
alert("Uploading. . . .?");
$('#restaurant_photo_upload').submit();
});
处理帖子的代码:
class AddRestaurantPhotoHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
......
......
......
self.render(u'restaurant_profile', restaurant=restaurant, restaurant_key=restaurant_key)
以前,在添加ajaxSubmit()代码而不是正常提交之后,我能够通过self.redirect完成整个过程。然而,最近,它给我一个错误,“对象没有属性'渲染'
如果在这种情况下使用self.render是唯一的解决方法,如何将其他查询字符串或数据传递回模板?
我在某种意义上感到困惑,我认为ajax不需要再次渲染页面。
答案 0 :(得分:1)
目前BlobstoreUploadHandler需要重定向,因此您可以像这样传递查询字符串:
self.redirect("/restaurant_profile/%d/success" % (restaurant.key().id()))
如果需要更多变量,您可以将其保存到数据存储区并显示它。
我在google小组中询问为什么我们无法使用blobstoreuploadhandler进行正常渲染,答案是在生产时已经删除了此要求,并且要求从SDK 1.5.4开始使用dev_appserver删除。
我已经使用plupload部署了类似的上传,可以使用jquery和插件上传文件,我的javascript用于上传
<script type="text/javascript" src="/static/plupload/plupload.full.min.js"></script>
<script type="text/javascript" src="/static/plupload/jquery.plupload.queue.min.js"></script>
<script type="text/javascript">
$(function() {
uploader = $("#uploader").pluploadQueue({
runtimes: 'flash,html5,gears,html4',
use_query_string: false,
multipart: true,
flash_swf_url: '/static/plupload/plupload.flash.swf',
filters: [],
}).pluploadQueue();
uploader.bind('UploadFile', function(up, file) {
$.ajax({
url: '/generate_upload_url',
async: false,
success: function(data) {
up.settings.url = data;
},
});
});
});
</script>