1- from flask import redirect , render_template
1+ from flask import redirect , render_template , request , session , url_for
22from flask_wtf import Form
33from sopy import db
44from sopy .auth .login import group_required , current_user , login_required , require_group , has_group
1010
1111@bp .route ('/' )
1212def index ():
13- pages = WikiPage .query .order_by (WikiPage .title )
13+ pages = WikiPage .query .filter ( WikiPage . redirect_id . is_ ( None )). order_by (WikiPage .title )
1414
1515 if not has_group ('editor' ):
1616 pages = pages .filter (db .not_ (WikiPage .draft ))
@@ -20,11 +20,21 @@ def index():
2020 return render_template ('wiki/index.html' , pages = pages )
2121
2222
23- @bp .route ('/<wiki_title:title>/ ' )
23+ @bp .route ('/<wiki_title:title>' )
2424def detail (title ):
25- page = WikiPage .query .filter (WikiPage .title == title ).first_or_404 ()
25+ page = WikiPage .query .filter (WikiPage .title == title ).options (db .joinedload (WikiPage .redirect )).first_or_404 ()
26+
27+ if page .redirect and 'no_redirect' not in request .args :
28+ session ['redirect_from' ] = title
29+ return redirect (page .redirect .detail_url )
2630
27- return render_template ('wiki/detail.html' , page = page )
31+ if 'redirect_from' in session :
32+ redirect_from = session ['redirect_from' ]
33+ del session ['redirect_from' ]
34+ else :
35+ redirect_from = None
36+
37+ return render_template ('wiki/detail.html' , page = page , redirect_from = redirect_from )
2838
2939
3040@bp .route ('/create' , endpoint = 'create' , methods = ['GET' , 'POST' ])
@@ -42,6 +52,11 @@ def update(title=None):
4252 if page is None :
4353 page = WikiPage ()
4454 db .session .add (page )
55+ else :
56+ page .redirect = None
57+
58+ if page .title != form .title .data :
59+ db .session .add (WikiPage (title = page .title , body = '' , redirect = page , author = current_user ))
4560
4661 page .author = current_user
4762 form .populate_obj (page )
0 commit comments