def handle_slug(slug, title): """Create slug and page properties. If slug is not given generate from title. If slug has a '/' prefix make post a root page. If slug has a leading '!' also list page on the sidebar. """ slug = slug.strip() if slug == '' or slug == '/' or slug == '!' or slug == '!/': slug += blog.slugify(title) if len(slug)>0 and slug[0] == '!': is_entry_page = True slug = slug[1:] else: is_entry_page = False if len(slug)>0 and slug[0] == '/': is_page = True slug = slug[1:] else: is_page = False slug_defaulted = False matches = re.findall(r'([-\w]+)', slug) if not (bool(slug) and matches and slug == matches[0]): # not valid slug? # fall back to using title slug = blog.slugify(title) slug_defaulted = True return slug, slug_defaulted, is_entry_page, is_page
def post(self): new_post = blog.Post() new_post.title = self.request.get('title') new_post.body = self.request.get('body') slug = self.request.get('slug').strip() if slug == '': slug = blog.slugify(new_post.title) new_post.slug = slug excerpt = self.request.get('excerpt').strip() if excerpt == '': excerpt = None new_post.excerpt = excerpt new_post.tags = self.request.get('tags').split(',') if self.request.get('submit') == 'Submit': if new_post.put(): # for now I use this sleep here to wait the post be created. I can't find a way to # solve it. invesigate better later. time.sleep(2) self.redirect(new_post.get_absolute_url()) else: new_post.populate_html_fields() template_values = { 'post': new_post, } page = view.Page() page.render(self, 'admin/post_form.html', template_values)
def save(self, post=None, commit=True): data = self.cleaned_data if not post: post = blog.Post() post.title = data['title'] post.slug = data['slug'] if not data['slug'] == '' else blog.slugify(data['title']) post.tags = data['tags'].split() post.excerpt = data['excerpt'] if not data['excerpt'] == '' else None post.body = data['body'] post.publish = data['publish'] post.populate_html_fields() if commit: post.put() return post
def post(self, year, month, day, slug): year = int(year) month = int(month) day = int(day) # Build the time span to check for the given slug start_date = datetime.datetime(year, month, day) time_delta = datetime.timedelta(days=1) end_date = start_date + time_delta # Create a query to check for slug uniqueness in the specified time span query = blog.Post.all() query.filter('pub_date >= ', start_date) query.filter('pub_date < ', end_date) query.filter('slug = ', slug) post = query.get() if post == None: page = view.Page() page.render_error(self, 404) else: action_url = post.get_edit_url() post.title = self.request.get('title') post.body = self.request.get('body') slug = self.request.get('slug').strip() if slug == '': slug = blog.slugify(post.title) post.slug = slug excerpt = self.request.get('excerpt').strip() if excerpt == '': excerpt = None post.excerpt = excerpt post.tags = self.request.get('tags').split(',') if self.request.get('submit') == 'Submit': post.put() # for now I use this sleep here to wait the post be created. I can't find a way to # solve it. invesigate better later. time.sleep(2) self.redirect(post.get_absolute_url()) else: post.populate_html_fields() template_values = { 'action': action_url, 'post': post, } page = view.Page() page.render(self, 'admin/post_form.html', template_values)
def clean_slug(self): data = self.cleaned_data['slug'] data = data if not data == '' else blog.slugify(self.cleaned_data['title']) return data