使用django访问couchdb存储视图
我将Django框架与Couchdb结合使用,以下面的示例为基础: 我在使用特设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
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(')时,我得到的是相同的空结果。关于如何跟踪这两个结果之间的差异,有什么想法吗?