Fet Foto Gallery Design
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,3 +6,4 @@ env
|
|||||||
*.log
|
*.log
|
||||||
*.sock
|
*.sock
|
||||||
*.pid
|
*.pid
|
||||||
|
thumbs/*
|
||||||
@@ -14,20 +14,8 @@ import os
|
|||||||
import re
|
import re
|
||||||
from PIL import Image, ExifTags, ImageOps
|
from PIL import Image, ExifTags, ImageOps
|
||||||
from functools import partial
|
from functools import partial
|
||||||
#from .flatpages import FileLists
|
|
||||||
|
|
||||||
# This is the directory, required for absolute file paths
|
|
||||||
#package_directory = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
# Loading the config file
|
|
||||||
#cfg = Config((os.path.join(package_directory, '../config.cfg')))
|
|
||||||
cfg = Config("config.cfg")
|
cfg = Config("config.cfg")
|
||||||
# Loading constants from config file
|
|
||||||
#FLATPAGES_AUTO_RELOAD = cfg.get("FLATPAGES_AUTO_RELOAD",True) # Default can be overwritten by config cfg
|
|
||||||
#FLATPAGES_EXTENSION = cfg.get("FLATPAGES_EXTENSION",".md") # Default can be overwritten by config cfg
|
|
||||||
#FLATPAGES_ROOT = os.path.abspath(cfg.pages_root)
|
|
||||||
#FLATPAGES_DEFAULT_TEMPLATE = cfg.get("FLATPAGES_DEFAULT_TEMPLATE","gallery.html")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Initialize application
|
# Initialize application
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
@@ -37,19 +25,16 @@ app.logger.setLevel(logging.DEBUG)
|
|||||||
|
|
||||||
flatpages = FlatPagesIndex(app)
|
flatpages = FlatPagesIndex(app)
|
||||||
flatpages_index.Links.endpoint="intern.post"
|
flatpages_index.Links.endpoint="intern.post"
|
||||||
|
flatpages_index.Links.image_url=lambda s,x: url_for(s.endpoint,name=x)
|
||||||
flatpages_index.Links.thumb_url=lambda s,x: url_for("intern.thumb",size=128,name=x)
|
flatpages_index.Links.thumb_url=lambda s,x: url_for("intern.thumb",size=128,name=x)
|
||||||
flatpages_index.Links.image_url=lambda s,x: url_for("intern.post",name=x)
|
flatpages_index.Links.image_url=lambda s,x: url_for("intern.post",name=x)
|
||||||
|
flatpages_index.Page.page_defaults={"type":"gallery"}
|
||||||
flatpages.get('index')
|
flatpages.get('index')
|
||||||
|
|
||||||
app.logger.info('Initialize Foto Gallery App')
|
app.logger.info('Initialize FET Foto Gallery App')
|
||||||
app.logger.info('flatpages loaded %d pages' % len(flatpages._pages))
|
app.logger.info('flatpages loaded %d pages' % len(flatpages._pages))
|
||||||
app.logger.info("Data directory is: %s" % flatpages.root)
|
app.logger.info("Data directory is: %s" % flatpages.root)
|
||||||
app.logger.info("Url prefix;: %s" % cfg.url_prefix)
|
app.logger.info("Url prefix;: %s" % cfg.url_prefix)
|
||||||
app.url_map.strict_slashes=True
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -57,6 +42,7 @@ freezer = Freezer(app)
|
|||||||
|
|
||||||
|
|
||||||
page_blueprint = Blueprint('intern', __name__)
|
page_blueprint = Blueprint('intern', __name__)
|
||||||
|
api_blueprint = Blueprint('api', __name__)
|
||||||
|
|
||||||
@page_blueprint.route('/thumb<int:size>/<path:name>')
|
@page_blueprint.route('/thumb<int:size>/<path:name>')
|
||||||
def thumb(size=64,name=''):
|
def thumb(size=64,name=''):
|
||||||
@@ -69,18 +55,19 @@ def thumb(size=64,name=''):
|
|||||||
print("creating thumb")
|
print("creating thumb")
|
||||||
image= Image.open(file_name,'r')
|
image= Image.open(file_name,'r')
|
||||||
s=size, size
|
s=size, size
|
||||||
for orientation in ExifTags.TAGS.keys():
|
if image._getexif() is not None:
|
||||||
if ExifTags.TAGS[orientation]=='Orientation':
|
for orientation in ExifTags.TAGS.keys():
|
||||||
break
|
if ExifTags.TAGS[orientation]=='Orientation':
|
||||||
exif=dict(image._getexif().items())
|
break
|
||||||
|
exif=dict(image._getexif().items())
|
||||||
|
|
||||||
if exif[orientation] == 3:
|
if exif[orientation] == 3:
|
||||||
image=image.rotate(180, expand=True)
|
image=image.rotate(180, expand=True)
|
||||||
elif exif[orientation] == 6:
|
elif exif[orientation] == 6:
|
||||||
image=image.rotate(270, expand=True)
|
image=image.rotate(270, expand=True)
|
||||||
elif exif[orientation] == 8:
|
elif exif[orientation] == 8:
|
||||||
image=image.rotate(90, expand=True)
|
image=image.rotate(90, expand=True)
|
||||||
thumb=ImageOps.fit(image,s,Image.ANTIALIAS)
|
thumb=ImageOps.fit(image,s,Image.ANTIALIAS)
|
||||||
print("writing %s"% thumb_name)
|
print("writing %s"% thumb_name)
|
||||||
|
|
||||||
os.makedirs(thumb_path,exist_ok=True)
|
os.makedirs(thumb_path,exist_ok=True)
|
||||||
@@ -103,7 +90,6 @@ def post(name=''):
|
|||||||
page["has_img"]=True
|
page["has_img"]=True
|
||||||
page.links.endpoint='intern.post'
|
page.links.endpoint='intern.post'
|
||||||
|
|
||||||
|
|
||||||
return render_template(page["template"], post=page,
|
return render_template(page["template"], post=page,
|
||||||
pth=page["dirpath"])
|
pth=page["dirpath"])
|
||||||
|
|
||||||
@@ -112,19 +98,21 @@ def post(name=''):
|
|||||||
elif os.path.exists(os.path.join('static',name)):
|
elif os.path.exists(os.path.join('static',name)):
|
||||||
print("send from static dir %s" % name)
|
print("send from static dir %s" % name)
|
||||||
return send_from_directory('static',name)
|
return send_from_directory('static',name)
|
||||||
|
elif os.path.exists(os.path.join(cfg["fet_assets"],name)):
|
||||||
|
return send_from_directory(cfg["fet_assets"],name)
|
||||||
else:
|
else:
|
||||||
return send_from_directory('blueimp',name)
|
return send_from_directory('blueimp',name)
|
||||||
|
|
||||||
|
|
||||||
@page_blueprint.route('/<path:name>.json',strict_slashes=False)
|
@api_blueprint.route('/<path:name>.json',strict_slashes=False)
|
||||||
@page_blueprint.route('/.json',strict_slashes=False)
|
@api_blueprint.route('/.json',strict_slashes=False)
|
||||||
def postjson(name='index'):
|
def postjson(name='index'):
|
||||||
print("Post: %s" % name)
|
print("Post: %s" % name)
|
||||||
|
|
||||||
page = flatpages.get(name)
|
page = flatpages.get(name)
|
||||||
if not page is None:
|
if not page is None:
|
||||||
page["has_img"]=True # can be overwritten by file
|
page["has_img"]=True # can be overwritten by file
|
||||||
page.links.endpoint='intern.postjson'
|
page.links.endpoint='api.postjson'
|
||||||
|
|
||||||
return jsonify(page=dict(page))
|
return jsonify(page=dict(page))
|
||||||
|
|
||||||
@@ -136,4 +124,5 @@ def postjson(name='index'):
|
|||||||
|
|
||||||
|
|
||||||
app.register_blueprint(page_blueprint, url_prefix=cfg.url_prefix,static_folder='static')
|
app.register_blueprint(page_blueprint, url_prefix=cfg.url_prefix,static_folder='static')
|
||||||
|
app.register_blueprint(api_blueprint, url_prefix="/api/"+cfg.url_prefix,static_folder='static')
|
||||||
app.add_url_rule('%s/<path:name>' % cfg.url_prefix,'page', post)
|
app.add_url_rule('%s/<path:name>' % cfg.url_prefix,'page', post)
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{# -*-jinja2-*- #}
|
{# -*-jinja2-*- #}
|
||||||
{% extends "layout.html" %}
|
{% extends "layoutfetbs3.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>{{post.title}}</h1>
|
<h1>{{post.title}}</h1>
|
||||||
|
<small> von {{post.author}} </small>
|
||||||
{{post.html | safe}}
|
{{post.html | safe}}
|
||||||
{% if post.links.images |length > 0 %}
|
{% if post.links.images |length > 0 %}
|
||||||
|
|
||||||
@@ -22,11 +23,11 @@
|
|||||||
<div id="links">
|
<div id="links">
|
||||||
{% for d in post.links.images %}
|
{% for d in post.links.images %}
|
||||||
<a href="{{d.url}}" title="{{d.title}}">
|
<a href="{{d.url}}" title="{{d.title}}">
|
||||||
<img src="{{d.thumb_url}}" alt="{{d.title}}" />
|
<img src="{{d.thumb_url}}" alt="{{d.title}}" class="img-thumbnail" />
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<script src="/gallery/js/blueimp-gallery.min.js"></script>
|
<script src="/galleries/js/blueimp-gallery.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
document.getElementById('links').onclick = function(event) {
|
document.getElementById('links').onclick = function(event) {
|
||||||
event = event || window.event
|
event = event || window.event
|
||||||
|
|||||||
33
foto_gallery/templates/gallery_index.html
Normal file
33
foto_gallery/templates/gallery_index.html
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{# -*-jinja2-*- #}
|
||||||
|
{% extends "layoutfetbs3.html" %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{{ post.html|safe }}
|
||||||
|
|
||||||
|
|
||||||
|
{% if post.links.subindexpages | length > 0 %}
|
||||||
|
<div class= "container-fluid" >
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
{% for d in post.links.subindexpages %}
|
||||||
|
<div class="span6">
|
||||||
|
<a href="{{d.url}}" class="gallery-block media">
|
||||||
|
<img src="{{d.thumb_url}}" alt="{{d.title}}" class="img-thumbnail pull-left" />
|
||||||
|
<div class="media-body">
|
||||||
|
<small class="pull-right">{{d.date}} </small>
|
||||||
|
<h2> {{d.title}} </h2>
|
||||||
|
<div >{{d.desc}} </div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{{ loop.cycle('','</div><div class="row">'.safe) }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -1,26 +1,69 @@
|
|||||||
{# -*-jinja2-*- #}
|
{# -*-jinja2-*- #}
|
||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head>
|
||||||
<LINK href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" type="text/css">
|
<LINK href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" type="text/css">
|
||||||
<link rel="stylesheet" href="/gallery/css/blueimp-gallery.min.css" />
|
<link rel="stylesheet" href="/gallery/css/blueimp-gallery.min.css" />
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12">
|
|
||||||
<nav class="breadcrumb" style="background-color: #FFF">
|
|
||||||
{% for b in post.links.breadcrumbs %}
|
|
||||||
<a href="{#url_for('page',name=b.path)#}{{b.url}}" class="breadcrumb-item">{{b.title}} </a>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</nav>
|
<!-- <link rel="stylesheet" href="/gallery/blue2fetat.css" />-->
|
||||||
|
</head>
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="maincontainer" class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-10 offset-1">
|
||||||
|
|
||||||
|
<div class="header_wrap">
|
||||||
|
<nav class="navbar navbar-expand-sm">
|
||||||
|
|
||||||
|
<div class="header d-print-none hidden-print">
|
||||||
|
<a href="/home">
|
||||||
|
<img alt="Logo2014_64" src="/gallery/logo2014_64.png" style="float:left;height:50px" height="50">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="header d-print-block d-none">
|
||||||
|
<img alt="Logo2014_64" src="/gallery/logo2014_64.png" style="float:left;height:50px" height="50">
|
||||||
|
|
||||||
|
Fachschaft Elektrotechnik
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
<div id="menudiv" class="collapse navbar-collapse navbar-expand-sm">
|
||||||
|
<ul class="nav nav-pills nav-stacked">
|
||||||
|
<li class="nav-item"><a class="nav-link" href="/home">Startseite</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="/rubriken">Neuigkeiten</a></li>
|
||||||
|
|
||||||
|
<li><a href="/themengruppen">Information</a></li>
|
||||||
|
<li><a href="/members">Mitarbeiter</a></li>
|
||||||
|
<li><a href="/galleries">Fotos</a></li>
|
||||||
|
<li><a href="/studien">Studien/Beispielsammlung</a></li>
|
||||||
|
<li> <a href="/home/search">Suche</a></li>
|
||||||
|
<li> <a href="/home/kontakt">Kontakt</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-10 offset-1">
|
||||||
|
<nav class="breadcrumb" style="background-color: #FFF">
|
||||||
|
{% for b in post.links.breadcrumbs %}
|
||||||
|
<a href="{#url_for('page',name=b.path)#}{{b.url}}" class="breadcrumb-item">{{b.title}} </a> /
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
128
foto_gallery/templates/layoutfetbs3.html
Normal file
128
foto_gallery/templates/layoutfetbs3.html
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
{# -*-jinja2-*- #}
|
||||||
|
<html>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="shortcut icon" href="https://www.fet.at/logo2014_64.png">
|
||||||
|
|
||||||
|
<link rel="alternate" hreflang="de" href="/de/home/search" />
|
||||||
|
<link rel="alternate" hreflang="en" href="/en/home/search" />
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/galleries/blue2fetat.css" />
|
||||||
|
<link rel="stylesheet" href="/galleries/css/blueimp-gallery.min.css" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="https://www.fet.at/assets/application-7cbec5b180d121b587cfe58e2d4517d1.js" type="text/javascript"></script>
|
||||||
|
<title>Fetsite</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="maincontainer" class="container-fluid">
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span10 offset1 header_span">
|
||||||
|
<div class="header_wrap">
|
||||||
|
<div class="header hidden-print">
|
||||||
|
<a href="/home">
|
||||||
|
<!-- <span class="feticon-fet_logo fa-4x color-1"> </span>-->
|
||||||
|
<img alt="/galleries/Logo2014_64" height="50" src="/galleries/logo2014_64.png" style="float:left;height:50px" />
|
||||||
|
</a> </div>
|
||||||
|
<div class="header visible-print">
|
||||||
|
<img alt="Logo2014_64" height="50" src="/galleries/logo2014_64.png" style="float:left;height:50px" />
|
||||||
|
</div>
|
||||||
|
<div class="visible-print">
|
||||||
|
Fachschaft Elektrotechnik
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div id="menudiv" style="margin-top:12px" class="hidden-print">
|
||||||
|
<div class="navbar">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<div class="container">
|
||||||
|
<!-- <a class="brand" href="#"></a>-->
|
||||||
|
<a class ="btn btn-navbar" data-toggle="collapse" data-parent="#menudiv" data-target=".nav-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</a>
|
||||||
|
<div class="nav-collapse collapse">
|
||||||
|
<ul class="nav nav-pills nav-stacked">
|
||||||
|
<li><a href="/home">Startseite</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="/rubriken">Neuigkeiten</a></li>
|
||||||
|
|
||||||
|
<li><a href="/themengruppen">Information</a></li>
|
||||||
|
<li><a href="/members">Mitarbeiter</a></li>
|
||||||
|
<li><a href="/galleries">Fotos</a></li>
|
||||||
|
<li><a href="/studien">Studien/Beispielsammlung</a></li>
|
||||||
|
<li> <a href="/home/search">Suche</a></li>
|
||||||
|
<li> <a href="/home/kontakt">Kontakt</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
<ul class="nav nav-pills nav-stacked pull-right">
|
||||||
|
<li>
|
||||||
|
<!--<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" > <img alt="De" src="/flaggen/png/de.png" /> Deutsch<b class="caret"></b></a>-->
|
||||||
|
<!-- Split button -->
|
||||||
|
<div class="btn-group navbar-btn">
|
||||||
|
<button type="button" class="btn btn-link dropdown-toggle" data-hover="dropdown" aria-expanded="false">
|
||||||
|
<img alt="De" src="/flaggen/png/de.png" /> Deutsch
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-link dropdown-toggle" data-hover="dropdown" data-toggle="dropdown" >
|
||||||
|
<span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu" role="menu">
|
||||||
|
<li><a href="/de"><img alt="At" src="/flaggen/png/at.png" /> Deutsch</a> </li>
|
||||||
|
|
||||||
|
<li><a href="/en"><img alt="Gb" src="/flaggen/png/gb.png" /> English</a> </li>
|
||||||
|
|
||||||
|
</ul></div>
|
||||||
|
</li><li>
|
||||||
|
<a href="/users/auth/ldap"><i class="ficon ffi1-academic"></i>FET Login</a>
|
||||||
|
</li></ul>
|
||||||
|
|
||||||
|
<!--<span class="pull-right"> <a href="/en"><img alt="Gb" src="/flaggen/png/gb.png" /> English</a>
|
||||||
|
</span>-->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$('.dropdown-toggle').click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
setTimeout($.proxy(function() {
|
||||||
|
if ('ontouchstart' in document.documentElement) {
|
||||||
|
$(this).siblings('.dropdown-backdrop').off().remove();
|
||||||
|
}
|
||||||
|
}, this), 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span10 offset1 header_span">
|
||||||
|
<nav class="breadcrumb" style="background-color: #FFF">
|
||||||
|
{% for b in post.links.breadcrumbs %}
|
||||||
|
<a href="{#url_for('page',name=b.path)#}{{b.url}}" class="breadcrumb-item">{{b.title}} </a> /
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{# -*-jinja2-*- #}
|
{# -*-jinja2-*- #}
|
||||||
{% extends "layout.html" %}
|
{% extends "layoutfetbs3.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<h1>{{post.title}}</h1>
|
<h1>{{post.title}}</h1>
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
<ul class="nav flex-column flex-sm-row " labeledby="up_head">
|
<ul class="nav flex-column flex-sm-row " labeledby="up_head">
|
||||||
{% for d in post.links.subindexpages %}
|
{% for d in post.links.subindexpages %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="{{d.url}}" class="nav-link">
|
<a href="{{d.url}}" class="nav-link"> <img src="{{d.thumb_url}}" alt="{{d.title}}" class="img-thumbnail" />
|
||||||
<h6> {{d.title}} <small class="text-muted">{{d.desc}} </small> </h6>
|
<h6> {{d.title}} ({{d.date}} <small class="text-muted">{{d.desc}} </small> </h6>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -27,7 +27,8 @@
|
|||||||
{% for d in post.links.subpages %}
|
{% for d in post.links.subpages %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="{{d.url}}" class="nav-link text-info">
|
<a href="{{d.url}}" class="nav-link text-info">
|
||||||
<h6> {{d.title}} <small class="text-muted">{{d.desc}} </small>
|
<h6> <img src="{{d.thumb_url}}" alt="{{d.title}}" class="img-thumbnail" />
|
||||||
|
{{d.title}} <small class="text-muted">{{d.desc}} </small>
|
||||||
</h6>
|
</h6>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|||||||
@@ -3,4 +3,5 @@ Frozen-Flask
|
|||||||
config
|
config
|
||||||
uwsgi
|
uwsgi
|
||||||
gevent
|
gevent
|
||||||
|
Pillow
|
||||||
git+https://github.com/andreassteph/flatpages_index.git
|
git+https://github.com/andreassteph/flatpages_index.git
|
||||||
|
|||||||
Reference in New Issue
Block a user