def articles_view(slug): """ Show article from <slug> or 404 """ from models import Article article = Article.by_slug(slug).filter(Article.pub_date < datetime.now()).first_or_404() return render_template('articles/view.html', **locals())
def article_edit(slug): """ Render edit article form by <slug> or update data from `POST` """ from models import Article, Tag, db from forms import ArticleForm article = Article.by_slug(slug=slug).first_or_404() form = ArticleForm() if request.method != 'POST': # init form data from object form.title.data = article.title form.slug.data = article.slug form.description.data = article.description form.content.data = article.content tags = [t.title for t in article.tags] for t in tags: if form.tags.data: form.tags.data += ", " + t else: form.tags.data = t form.pub_date.data = article.pub_date.strftime("%Y-%m-%d %H:%M:%S") form.upd_date.data = article.upd_date.strftime("%Y-%m-%d %H:%M:%S") else: if form.validate(): article.title = form.title.data article.slug = form.slug.data article.description = form.description.data article.content = form.content.data article.pub_date = datetime.strptime(form.pub_date.data, '%Y-%m-%d %H:%M:%S') # autonow if empty or error try: upd_datetime = datetime.strptime(form.upd_date.data, '%Y-%m-%d %H:%M:%S') except Exception: article.upd_date = datetime.now() article.tags = [] tags_raw = form.tags.data.split(',') for t in tags_raw: t = t.strip() # Get or create try: article.tags += [Tag.query.filter(Tag.title == t)[0]] except Exception: article.tags += [Tag(t)] db.session.commit() flash("Article updated success.", 'success') return redirect(url_for('articles_view', slug=form.slug.data)) return render_template('articles/edit.html', **locals())