使用django访问couchdb存储视图

使用django访问couchdb存储视图,django,couchdb,Django,Couchdb,我将Django框架与Couchdb结合使用,以下面的示例为基础: 我在使用特设couchdb视图时没有遇到任何问题,但是当我用存储视图替换它时,我没有得到任何结果 例如,这起了作用: def index(request): docs = SERVER['docs'] all_pages = "function(d) { if ( (d.title.length>0) && (d.type=='otherpage') ) emit(d.title

我将Django框架与Couchdb结合使用,以下面的示例为基础:

我在使用特设couchdb视图时没有遇到任何问题,但是当我用存储视图替换它时,我没有得到任何结果

例如,这起了作用:

def index(request):
    docs = SERVER['docs']
    all_pages = "function(d) { if ( (d.title.length>0) && (d.type=='otherpage') ) emit(d.title,d); }"
    pages = [ x for x in docs.query(all_pages) ]
    all_blogposts = "function(d) { if ( (d.title.length>0) && (d.type=='blogpost') ) emit([d.date,d.title],d); }"
    blogposts = [ x for x in docs.query(all_blogposts) ]
    return render_to_response('couch_docs/index.html',{'pages':pages,'blogposts':blogposts})
然而,这并没有:

def index(request):
    docs = SERVER['docs']
    all_pages = docs.view('_view/example/all_pages')   
    pages = all_pages.rows()
    all_blogposts = "function(d) { if ( (d.title.length>0) && (d.type=='blogpost') ) emit([d.date,d.title],d); }"
    blogposts = [ x for x in docs.query(all_blogposts) ]
    return render_to_response('couch_docs/index.html',{'pages':pages,'blogposts':blogposts})
当我转到Futon屏幕并选择example/all_pages视图时,它会返回几个文档。然而,当我试图从Django内部使用它时,它不会返回任何结果。当我在python命令行执行此操作时,它也不返回任何内容。似乎我没有正确定义所有的_页面?如果我把它打印出来,它如下所示:

<ViewResults <PermanentView '_view/example/all_pages'> {}>

所以,是的,它是空的。有人能看出我做错了什么吗?当我在Futon中的“示例”下选择“all_pages”视图时,返回的结果没有问题。感谢您的帮助

p、 所以我也尝试了这个教程:

我也有同样的问题,即虽然我可以连接到coach,启动Futon,创建数据库、文档和设计文档(在python命令行中),然后查看它们(包括在Futon中),但我无法从永久视图中获得结果。我再次发现,我可以从Futon内部运行视图(与在python命令行中创建的视图完全相同),并返回结果,但是当尝试使用python中的视图时,我没有返回结果


因为这是他们在教程中所做的逐角色操作,我想这可能意味着我的代码没有问题,而是我的软件设置有问题。关于哪一块最有可能出现问题,或者如何找到问题,你有什么想法吗?

发生这种情况的原因有很多。请记住,Futon会自动添加两个额外的参数,请尝试直接加载视图:

卷曲

如果确实加载了,那么这就是Python代码的问题。在python couchdb中,语法为:

couchdb.Server('http://localhost:5984“)['docs'].view('示例/所有页面')

如果这是可行的,那么这就是如何与couchdb库交互的问题


顺便说一句,[x代表x在任何东西中]与仅使用列表构造函数相同,例如列表(任何东西)。

以下是有效的方法:

def index(request):
docs = SERVER['docs']
pages = [ x for x in docs.view("_design/example/_view/all_pages") ]
all_blogposts = "function(d) { if ( (d.title.length>0) && (d.type=='blogpost') ) emit([d.date,d.title],d); }"
blogposts = [ x for x in docs.query(all_blogposts) ]
return render_to_response('couch_docs/index.html',{'pages':pages,'blogposts':blogposts})

我不完全确定为什么这样做有效,因为我阅读的示例和文档似乎表明我不需要那里的_设计和/或_视图。但是,你知道,它是有效的,所以我要用它。也许是couchdb python的版本不同?

谢谢您的帮助。不过还是有些奇怪。当我尝试:,我会得到结果。当我尝试(在views.py文件中):pages=couchdb.Server(')时,我得到的是相同的空结果。关于如何跟踪这两个结果之间的差异,有什么想法吗?