def add_post(): """ Create a new post """ if request.method == 'POST': # Create New Blog Post Object blog_post = BlogPost(title=request.form['title'], text=request.form['text'], author=users.get_current_user(), url=clean_url(request.form['title'])) # Create New Blog Post Categories post_categories = request.form['categories'].split(",") blog_post.categories = BlogCategory.add_categories(post_categories) # Save the new post blog_post.put() # Redirect sleep(1) return redirect(url_for('admin.posts')) # GET return render_template('blog/admin-posts-add.html', categories=BlogCategory.query_all())
def more_posts(page_num): """ :param page_num: The number of pages/posts :return: AJAX more posts """ offset = int(page_num * ELEMENTS_PER_PAGE) return render_template('blog/admin-posts-more.html', posts=BlogPost.query().order(-BlogPost.date).fetch( ELEMENTS_PER_PAGE, offset=offset))
def home(page): offset = (page - 1) * POSTS_PER_PAGE q = BlogPost.query().order(-BlogPost.date) posts = q.fetch(POSTS_PER_PAGE, offset=offset) all_posts = len(q.fetch()) pagination = Pagination(page, POSTS_PER_PAGE, all_posts) response = make_response(render_template('front-index.html', posts=posts, pagination=pagination)) return response
def posts(): ''' Renders all posts''' if request.method == 'POST': # Get the Key, and delete() the object using Key (mandatory) ndb.Key('BlogPost', int(request.form['post_id'])).delete() time.sleep(1) return render_template('posts-view.html', posts=BlogPost.query().order(-BlogPost.date))
def home(page): offset = (page - 1) * POSTS_PER_PAGE q = BlogPost.query().order(-BlogPost.date) posts = q.fetch(POSTS_PER_PAGE, offset=offset) all_posts = len(q.fetch()) pagination = Pagination(page, POSTS_PER_PAGE, all_posts) response = make_response( render_template('front-index.html', posts=posts, pagination=pagination)) return response
def more_posts(page_num): """ :param page_num: The number of pages/posts :return: AJAX more posts """ offset = int(page_num * ELEMENTS_PER_PAGE) return render_template('blog/admin-posts-more.html', posts=BlogPost.query() .order(-BlogPost.date) .fetch(ELEMENTS_PER_PAGE, offset=offset))
def posts(page_num): """ GET --> Main post list POST --> Delete post """ if request.method == 'POST': post = request.get_json() # Get the Key, and delete() the object using Key (mandatory) ndb.Key('BlogPost', int(post['objects'][0])).delete() logging.info("Deleted post: {}".format(post['objects'][0])) return "true" all_posts = BlogPost.query().order(-BlogPost.date).fetch( ELEMENTS_PER_PAGE * page_num) plus = False if len(all_posts) < (ELEMENTS_PER_PAGE * page_num) else True return render_template('blog/admin-posts.html', posts=all_posts, plus=plus)
def posts(page_num): """ GET --> Main post list POST --> Delete post """ if request.method == 'POST': post = request.get_json() # Get the Key, and delete() the object using Key (mandatory) ndb.Key('BlogPost', int(post['objects'][0])).delete() logging.info("Deleted post: {}".format(post['objects'][0])) return "true" all_posts = BlogPost.query().order(-BlogPost.date).fetch(ELEMENTS_PER_PAGE*page_num) plus = False if len(all_posts) < (ELEMENTS_PER_PAGE*page_num) else True return render_template('blog/admin-posts.html', posts=all_posts, plus=plus)
def sitemap(): """Generate sitemap.xml. Makes a list of urls and date modified.""" pages = [['/', LAST_UPDATE]] # static pages for rule in main.app.url_map.iter_rules(): if "GET" in rule.methods and len(rule.arguments) == 0 and not re.match( '(?:admin|static)', rule.endpoint): pages.append([rule.rule, LAST_UPDATE]) # post model pages all_posts = BlogPost.query().order(-BlogPost.date).fetch() for single_post in all_posts: url = url_for('front.post', post_url=single_post.url) modified_time = single_post.date pages.append([url, modified_time]) sitemap_xml = render_template('sitemap_template.xml', pages=pages) response = make_response(sitemap_xml) response.headers["Content-Type"] = "application/xml" return response
def clean_url(text, delim=u'-'): """ Generates an ASCII-only slug. """ result = [] for word in PUNCTUATION.split(text.lower()): word = normalize('NFKD', word).encode('ascii', 'ignore') if word: result.append(word) url = unicode(delim.join(result)) url_used = BlogPost.get_urls() # Checks if already a URL like this exists if url in url_used: num = 1 middle_url = url+'-'+str(num) while middle_url in url_used: num += 1 middle_url = url+'-'+str(num) return middle_url return url
def clean_url(text, delim=u'-'): """ Generates an ASCII-only slug. """ result = [] for word in PUNCTUATION.split(text.lower()): word = normalize('NFKD', word).encode('ascii', 'ignore') if word: result.append(word) url = unicode(delim.join(result)) url_used = BlogPost.get_urls() # Checks if already a URL like this exists if url in url_used: num = 1 middle_url = url + '-' + str(num) while middle_url in url_used: num += 1 middle_url = url + '-' + str(num) return middle_url return url
def sitemap(): """Generate sitemap.xml. Makes a list of urls and date modified.""" pages = [['/', LAST_UPDATE]] # static pages for rule in main.app.url_map.iter_rules(): if "GET" in rule.methods and len(rule.arguments) == 0 and not re.match('(?:admin|static)', rule.endpoint): pages.append( [rule.rule, LAST_UPDATE] ) # post model pages all_posts = BlogPost.query().order(-BlogPost.date).fetch() for single_post in all_posts: url = url_for('front.post', post_url=single_post.url) modified_time = single_post.date pages.append([url, modified_time]) sitemap_xml = render_template('sitemap_template.xml', pages=pages) response = make_response(sitemap_xml) response.headers["Content-Type"] = "application/xml" return response
def post(post_url): single_post = BlogPost.query(BlogPost.url == post_url).get() return render_template('front-post.html', post=single_post)