def pictures_by_year(): """ view photos by year """ pictures = Picture.objects().order_by('-shot_time') year = 0 years = [] pictures_by_year = defaultdict(list) for picture in pictures: year = picture.shot_time.year if year not in years: years.append(year) pictures_by_year[year].append(picture) return render_template('main/pictures_by_year.html', pictures_by_year=pictures_by_year, years=years)
def pictures_by_tag(tag): """ view photos by tag """ pictures = Picture.objects(tags=tag).order_by('-shot_time') tag_dict = { 'mountain': '高山', 'water': '流水', 'things': '万物', 'people': '人间', 'me': '我', } return render_template('main/pictures_by_tag.html', pictures=pictures, tag=tag, tag_dict=tag_dict)
def index(): """ main page of the blog: it shows 5pages carousel 10 photos ordered by shot time per page """ pictures = Picture.objects().order_by('-shot_time') l = len(pictures) if l > 5: carousel_pictures = random.sample(list(pictures), 5) else: carousel_pictures = random.sample(list(pictures), l) page = request.args.get('page', 1, type=int) paginated_pictures = pictures.paginate( page=page, per_page=current_app.config['PIC_PER_PAGE']) current_page = paginated_pictures.page total_page = paginated_pictures.pages page_start = 1 page_end = 5 if total_page < 5: page_end = total_page else: page_start = current_page - 2 page_end = current_page + 2 if page_start < 1: page_start = 1 page_end = 5 if page_end > total_page: page_start = total_page - 4 page_end = total_page url_list = [] for p in range(1, total_page + 1): # so page number start from 1 url = url_for('main.index', page=p) url_list.append(url) return render_template('main/index.html', pictures=paginated_pictures.items, carousel_pictures=carousel_pictures, current_page=current_page, total_page=total_page, page_start=page_start, page_end=page_end, url_list=url_list)