Notice that SQLField is deprecated, we now use Field('field1','typeX'...) Richard
On Tue, Jul 26, 2011 at 11:16 AM, Web2Py Freak <halna...@gardeniatelco.com>wrote: > am losing my mind ... i am making the blogs i told u about , but with > images and videos .. but every post gets all the images and > videos .. whyyyyy :(( :: like this > > > here is my Code please guys help me . am going crazy > > > > ................................................................................ > db.py: > import datetime > now=datetime.datetime.today() > > > > db.define_table('blogposts', > SQLField('title', length=64), > SQLField('author', default=session.username), > SQLField('datetime', 'datetime',default=now), > SQLField('post', 'text'), > SQLField('numcomments', 'integer',default=0)) > > > > > > db.blogposts.title.requires = [IS_NOT_EMPTY(), > IS_NOT_IN_DB(db,db.blogposts.title)] > db.blogposts.author.requires = IS_NOT_EMPTY() > db.blogposts.post.requires = IS_NOT_EMPTY() > > db.define_table('blogcomments', > SQLField('url', default=''), > SQLField('blogpost_id'), # the blogpost this comment > belongs to > SQLField('email', default='y...@something.com'), > SQLField('author'), > SQLField('datetime', 'datetime',default=now), > SQLField('comment', 'text')) > > db.blogcomments.author.requires = IS_NOT_EMPTY() > db.blogcomments.comment.requires = IS_NOT_EMPTY() > db.blogcomments.email.requires = IS_EMAIL() > > > db.define_table('image',Field('blog_id',db.blogposts),Field('title'),Field('discription','text'),Field('image','upload')) > > db.image.title.requires = IS_NOT_IN_DB(db, db.image.title) > db.image.blog_id.requires = IS_IN_DB(db, db.blogposts.id, '% > (title)s') > > > db.define_table('youtube',Field('blog_id',db.blogposts),Field('title'),Field('discription','text'),Field('code')) > db.youtube.title.requires = IS_NOT_IN_DB(db, db.youtube.title) > db.youtube.blog_id.requires = IS_IN_DB(db, db.blogposts.id, '% > (title)s') > > > db.define_table('vimo',Field('blog_id',db.blogposts),Field('title'),Field('discription','text'),Field('code')) > db.vimo.title.requires = IS_NOT_IN_DB(db, db.vimo.title) > db.vimo.blog_id.requires = IS_IN_DB(db, db.blogposts.id, '%(title)s') > > > > ............................................................................................................................ > controler: > # -*- coding: utf-8 -*- > # this file is released under public domain and you can use without > limitations > > ######################################################################### > import datetime > > def getpostsandcomments(): > > blogposts = db().select(db.blogposts.ALL, > orderby=~db.blogposts.datetime) > blogposts_numcomments = db().select(db.blogposts.ALL, > orderby=~db.blogposts.numcomments|~db.blogposts.datetime) > commentsnposts = db(db.blogcomments.blogpost_id == > db.blogposts.id) > comments = commentsnposts.select(db.blogcomments.author, > db.blogcomments.blogpost_id, db.blogposts.title, > orderby=~db.blogcomments.datetime) > images=db(db.image.blog_id==db.blogposts.id).select(db.image.ALL) > > youtube=db(db.youtube.blog_id==db.blogposts.id).select(db.youtube.ALL) > vimo=db(db.vimo.blog_id==db.blogposts.id).select(db.vimo.ALL) > return dict(blogposts=blogposts, > blogposts_numcomments=blogposts_numcomments, > comments=comments,images=images,youtube=youtube,vimo=vimo) > > ######################################################################### > def createblogpost(): > > myd = getpostsandcomments() > > form=SQLFORM(db.blogposts,fields=['title','post','author','video','audio']) > if form.accepts(request.vars,session): > response.flash='new blogpost inserted' > redirect('/' + request.application + "/default/index") > myd['form'] = form > return myd > > def index(): > > return getpostsandcomments() > > def createblogpost(): > > myd = getpostsandcomments() > form=SQLFORM(db.blogposts,fields=['title','post','author']) > if form.accepts(request.vars,session): > response.flash='new blogpost inserted' > redirect('/' + request.application + "/default/index") > myd['form'] = form > return myd > > > > def showblogpost(): > images=db(db.image.blog_id == > db.blogposts.id).select(db.image.ALL) > youtube=db(db.youtube.blog_id == > db.blogposts.id).select(db.youtube.ALL) > vimo=db(db.vimo.blog_id == db.blogposts.id).select(db.vimo.ALL) > myd = getpostsandcomments() > > blogid = request.args[0] > singleblogpost = db(db.blogposts.id == blogid).select()[0] > singleblogpost_comments = db(db.blogcomments.blogpost_id == > blogid).select(orderby=~db.blogcomments.datetime) > > db.blogcomments.blogpost_id.default=singleblogpost.id > form=SQLFORM(db.blogcomments,fields=['author', 'email', > 'comment'],labels={'author':'Your Name', 'email':'Your email address', > 'comment':'Comment'}) > if form.accepts(request.vars,session): > blogpostupdate=db(db.blogposts.id==blogid).select() > if len(blogpostupdate)>0: > > blogpostupdate[0].update_record(numcomments=blogpostupdate[0].numcomments > + 1) > redirect('/' + request.application + "/default/showblogpost/" > + str(singleblogpost.id) + "#Reader_Comments") > > myd['form'] = form > myd['singleblogpost'] = singleblogpost > myd['singleblogpost_comments'] = singleblogpost_comments > return myd > return dict(images=images,youtube=youtube,vimo=vimo) > > def user(): > """ > exposes: > http://..../[app]/default/user/login > http://..../[app]/default/user/logout > http://..../[app]/default/user/register > http://..../[app]/default/user/profile > http://..../[app]/default/user/retrieve_password > http://..../[app]/default/user/change_password > use @auth.requires_login() > @auth.requires_membership('group name') > @auth.requires_permission('read','table name',record_id) > to decorate functions that need access control > """ > return dict(form=auth()) > > > def download(): > """ > allows downloading of uploaded files > http://..../[app]/default/download/[filename] > """ > return response.download(request,db) > > > def call(): > """ > exposes services. for example: > http://..../[app]/default/call/jsonrpc > decorate with @services.jsonrpc the functions to expose > supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv > """ > return service() > > > @auth.requires_signature() > def data(): > """ > http://..../[app]/default/data/tables > http://..../[app]/default/data/create/[table] > http://..../[app]/default/data/read/[table]/[id] > http://..../[app]/default/data/update/[table]/[id] > http://..../[app]/default/data/delete/[table]/[id[ > http://..../[app]/default/data/select/[table] > http://..../[app]/default/data/search/[table] > but URLs bust be signed, i.e. linked with > A('table',_href=URL('data/tables',user_signature=True)) > or with the signed load operator > > LOAD('default','data.load',args='tables',ajax=True,user_signature=True) > """ > return dict(form=crud()) > > > > ..................................................................................................................................... > index.html : > > {{extend 'layout.html'}} > > {{#=crud.create(db.image)}} > <div id="subContent"> > <h3>Most Commented On</h3> > <ul> > {{for blogpost in blogposts_numcomments:}} > <li class="statsclass1"><a href={{="/" + request.application > + "/default/showblogpost/" + str(blogpost.id)}}>{{=blogpost.title}}</ > a> ({{=blogpost.numcomments}})</li> > {{pass}} > </ul> > <p /> > <h3>Recent Comments</h3> > <ul> > {{for comment in comments:}} > <li class="statsclass1"><a href={{="/" + request.application > + "/default/showblogpost/" + str(comment.blogcomments.blogpost_id) + > "#Reader_Comments"}}>{{=comment.blogcomments.author}}</a> on <a > href={{="/" + request.application + "/default/showblogpost/" + > str(comment.blogcomments.blogpost_id)}}>{{=comment.blogposts.title}}</ > a></li> > {{pass}} > </ul> > </div> > > {{for blogpost in blogposts:}} > <div class="article" > > <h2>{{=blogpost.title}}</h2> > <i><span style="color : #666666;">{{=blogpost.datetime}}</ > span></i> > <div style="margin-left:200px"> <p><b> > > {{=XML(blogpost.post)}} > </p></b></div> > > {{for photo in images:}} > <div style="width:200px ; margin-left:200px"> > <div style="width:200px;margin-left:50px"> > <p><b>{{=XML(photo.title)}}</b></p> > </div> > <img width="200px" > src="{{=URL('download', args=photo.image)}}" /> > <div style="width:200px;margin-left:50px"> > <p>{{=XML(photo.discription)}}</p> > </div> > <div> > {{pass}} > </br> > {{for you in youtube:}} > <div style="width:200px;margin-left:150px"> > <p><b>{{=XML(you.title)}}</b></p> > </div> > {{=plugin_wiki.widget('youtube',code='' + XML(you.code))}} > <div style="width:200px;margin-left:150px"> > <p>{{=XML(you.discription)}}</p> > </div> > {{pass}} > > {{for v in vimo:}} > <div style="width:200px;margin-left:150px"> > <p><b>{{=XML(v.title)}}</b></p> > </div> > {{=plugin_wiki.widget('vimeo',code='' + XML(v.code))}} > <div style="width:200px;margin-left:150px"> > <p>{{=XML(v.discription)}}</p> > </div> > {{pass}} > > > > <ul class="comments"> > <li><a href="http://www.facebook.com"><img src="/ > AZEZ_BLOGS/static/images/Facebook-logo-100x100.png" width="40px" > height="40px" ></img></a></li> > <li><a href="http://www.vimeo.com"><img src="/AZEZ_BLOGS/ > static/images/th_vimeo-icon.png" width="40px" height="40px" ></img></ > a></li> > <li><a href="http://www.youtube.com"><img src="/AZEZ_BLOGS/ > static/images/youtube-icon.png" width="40px" height="40px" ></img></ > a></li> > <li>Posted by <a > href={{='mailto:whoe...@wherever.com'}}>{{=blogpost.author}}</a> | </ > li> > <li><a href={{="/" + request.application + "/default/ > showblogpost/" + str(blogpost.id) + "#Reader_Comments"}} > >{{=blogpost.numcomments}}</a> comments | </li> > <li><a href={{="/" + request.application + "/default/ > showblogpost/" + str(blogpost.id)}}>permalink</a></li> > </ul> > </div> > {{pass}} >