Notice that SQLField is deprecated, we now use Field('field1','typeX'...)
Richard
On Tue, Jul 26, 2011 at 11:16 AM, Web2Py Freak
<[email protected]>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='[email protected]'),
> 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:[email protected]'}}>{{=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}}
>