mirror of
				https://github.com/tiyn/container-critique.git
				synced 2025-10-31 11:11:21 +01:00 
			
		
		
		
	templates: changed to dynamic building in jinja
This commit is contained in:
		
							
								
								
									
										39
									
								
								src/app.py
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								src/app.py
									
									
									
									
									
								
							| @@ -6,7 +6,7 @@ from flask_wtf import CSRFProtect | |||||||
| import os | import os | ||||||
|  |  | ||||||
| import config | import config | ||||||
| import content as con_gen | from content import rating_to_star | ||||||
| from database import Database | from database import Database | ||||||
| from forms import LoginForm, RegisterForm, WriteForm | from forms import LoginForm, RegisterForm, WriteForm | ||||||
|  |  | ||||||
| @@ -26,7 +26,8 @@ login.login_view = "login" | |||||||
| @app.context_processor | @app.context_processor | ||||||
| def inject_title(): | def inject_title(): | ||||||
|     return dict(title=config.TITLE, style=config.STYLE, |     return dict(title=config.TITLE, style=config.STYLE, | ||||||
|                 description=config.DESCRIPTION, registration=config.ALLOW_REGISTRATION) |                 description=config.DESCRIPTION, \ | ||||||
|  |                 registration=config.ALLOW_REGISTRATION, r_to_star=rating_to_star) | ||||||
|  |  | ||||||
|  |  | ||||||
| @app.errorhandler(404) | @app.errorhandler(404) | ||||||
| @@ -36,36 +37,46 @@ def page_not_found(e): | |||||||
|  |  | ||||||
| @app.route("/") | @app.route("/") | ||||||
| def index(): | def index(): | ||||||
|     content = con_gen.gen_index_string() |     entries = db.get_entries() | ||||||
|     return render_template("index.html", content_string=content) |     entries.reverse() | ||||||
|  |     return render_template("index.html", entries=entries) | ||||||
|  |  | ||||||
|  |  | ||||||
| @app.route("/archive") | @app.route("/archive") | ||||||
| def archive(): | def archive(): | ||||||
|     content = con_gen.gen_arch_string() |     entries = db.get_entries() | ||||||
|     return render_template("archive.html", content_string=content) |     entries.sort(key=lambda y: y.item.name) | ||||||
|  |     entries.reverse() | ||||||
|  |     entries.sort(key=lambda y: y.item.date) | ||||||
|  |     entries.reverse() | ||||||
|  |     return render_template("archive.html", entries=entries) | ||||||
|  |  | ||||||
|  |  | ||||||
| @app.route("/user/<name>") | @app.route("/user/<name>") | ||||||
| def user(name): | def user(name): | ||||||
|     content = con_gen.gen_user_string(name) |     entries = db.get_entries_by_user(name) | ||||||
|     if content != "": |     entries.sort(key=lambda y: y.item.name) | ||||||
|         return render_template("user.html", name=name, content_string=content) |     entries.reverse() | ||||||
|  |     entries.sort(key=lambda y: y.item.date) | ||||||
|  |     entries.reverse() | ||||||
|  |     if entries != []: | ||||||
|  |         return render_template("user.html", name=name, entries=entries) | ||||||
|     abort(404) |     abort(404) | ||||||
|  |  | ||||||
|  |  | ||||||
| @app.route("/entry/<ident>") | @app.route("/entry/<ident>") | ||||||
| def entry(ident): | def entry(ident): | ||||||
|     content = con_gen.gen_stand_string(ident) |     entry = db.get_entry_by_id(ident) | ||||||
|     if content != "": |     if entry is not None: | ||||||
|         return render_template("standalone.html", content_string=content) |         return render_template("standalone.html", entry=entry) | ||||||
|     abort(404) |     abort(404) | ||||||
|  |  | ||||||
|  |  | ||||||
| @app.route("/feed") | @app.route("/feed") | ||||||
| def feed(): | def feed(): | ||||||
|     content = con_gen.get_rss_string() |     entries = db.get_entries() | ||||||
|     rss_xml = render_template("rss.xml", content_string=content) |     entries.reverse() | ||||||
|  |     rss_xml = render_template("rss.xml", entries=entries) | ||||||
|     return rss_xml |     return rss_xml | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										179
									
								
								src/content.py
									
									
									
									
									
								
							
							
						
						
									
										179
									
								
								src/content.py
									
									
									
									
									
								
							| @@ -1,5 +1,3 @@ | |||||||
| from flask import url_for |  | ||||||
|  |  | ||||||
| from database import Database | from database import Database | ||||||
|  |  | ||||||
| db = Database() | db = Database() | ||||||
| @@ -19,180 +17,3 @@ def rating_to_star(rating): | |||||||
|     if rating/20 % 1 >= 0.5: |     if rating/20 % 1 >= 0.5: | ||||||
|         res += u"\u00BD" |         res += u"\u00BD" | ||||||
|     return res |     return res | ||||||
|  |  | ||||||
|  |  | ||||||
| def gen_arch_string(): |  | ||||||
|     """ |  | ||||||
|     Creates and returns a archive string of every file in ENTRY_DIR. |  | ||||||
|  |  | ||||||
|     Returns: |  | ||||||
|     string: html-formatted archive-string. |  | ||||||
|     """ |  | ||||||
|     content_string = "" |  | ||||||
|     last_year = "" |  | ||||||
|     entries = db.get_entries() |  | ||||||
|     if entries is None: |  | ||||||
|         return "" |  | ||||||
|     entries.sort(key=lambda y: y.item.name) |  | ||||||
|     entries.reverse() |  | ||||||
|     entries.sort(key=lambda y: y.item.date) |  | ||||||
|     entries.reverse() |  | ||||||
|     for entry in entries: |  | ||||||
|         ident = entry.id |  | ||||||
|         title = entry.item.name |  | ||||||
|         print("title", title) |  | ||||||
|         year = entry.item.date |  | ||||||
|         rating = entry.rating |  | ||||||
|         username = entry.user.name |  | ||||||
|         if year != last_year: |  | ||||||
|             if last_year != "": |  | ||||||
|                 content_string += "</ul>\n" |  | ||||||
|             content_string += "<h2>" + year + "</h2>\n" |  | ||||||
|             content_string += "<ul>\n" |  | ||||||
|             last_year = year |  | ||||||
|         content_string += "<li>" |  | ||||||
|         content_string += title + "<a href=\"" + \ |  | ||||||
|             url_for("entry", ident=str(ident)) + "\"> " + \ |  | ||||||
|             rating_to_star(rating) + " by " + username |  | ||||||
|         content_string += "</a><br></li>\n" |  | ||||||
|  |  | ||||||
|     return content_string |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def gen_user_string(name): |  | ||||||
|     """ |  | ||||||
|     Creates and returns a archive string of every file in ENTRY_DIR. |  | ||||||
|  |  | ||||||
|     Returns: |  | ||||||
|     string: html-formatted archive-string. |  | ||||||
|     """ |  | ||||||
|     content_string = "" |  | ||||||
|     last_year = "" |  | ||||||
|     entries = db.get_entries_by_user(name) |  | ||||||
|     if entries is None: |  | ||||||
|         return "" |  | ||||||
|     entries.sort(key=lambda y: y.item.name) |  | ||||||
|     entries.reverse() |  | ||||||
|     entries.sort(key=lambda y: y.item.date) |  | ||||||
|     entries.reverse() |  | ||||||
|     for entry in entries: |  | ||||||
|         ident = entry.id |  | ||||||
|         title = entry.item.name |  | ||||||
|         year = entry.item.date |  | ||||||
|         rating = entry.rating |  | ||||||
|         username = entry.user.name |  | ||||||
|         if year != last_year: |  | ||||||
|             if last_year != "": |  | ||||||
|                 content_string += "</ul>\n" |  | ||||||
|             content_string += "<h2>" + year + "</h2>\n" |  | ||||||
|             content_string += "<ul>\n" |  | ||||||
|             last_year = year |  | ||||||
|         content_string += "<li>" |  | ||||||
|         content_string += title + "<a href=\"" + \ |  | ||||||
|             url_for("entry", ident=str(ident)) + "\"> " + \ |  | ||||||
|             rating_to_star(rating) |  | ||||||
|         content_string += "</a><br></li>\n" |  | ||||||
|  |  | ||||||
|     return content_string |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def gen_index_string(): |  | ||||||
|     """ |  | ||||||
|     Create and returns a string including every file in the database as an |  | ||||||
|     index. |  | ||||||
|  |  | ||||||
|     Returns: |  | ||||||
|     string: html-formatted index string. |  | ||||||
|     """ |  | ||||||
|     content_string = "" |  | ||||||
|     entries = db.get_entries() |  | ||||||
|     if entries is None: |  | ||||||
|         return "" |  | ||||||
|     entries.reverse() |  | ||||||
|     for entry in entries: |  | ||||||
|         ident = entry.id |  | ||||||
|         title = entry.item.name |  | ||||||
|         year = entry.item.date |  | ||||||
|         text = entry.text |  | ||||||
|         rating = entry.rating |  | ||||||
|         username = entry.user.name |  | ||||||
|         reviewed = entry.reviewed |  | ||||||
|         content_string += "<div class=\"entry\">\n" |  | ||||||
|         content_string += "<h1 id=\"" + str(ident) + "\"><a href=\"" + \ |  | ||||||
|             url_for("entry", ident=str(ident)) + "\">" + title + \ |  | ||||||
|             " (" + year + ") " + rating_to_star(rating) + "</a></h1>\n" |  | ||||||
|         content_string += "<small>rated " + str(rating) + \ |  | ||||||
|             "/100 by <a href=\"" + url_for("user", name=username) + "\">" \ |  | ||||||
|             + username + "</a> on " + str(reviewed) + "</small><br>" |  | ||||||
|         content_string += text |  | ||||||
|         content_string += "<br>" |  | ||||||
|         content_string += "</div>" |  | ||||||
|     return content_string |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def gen_stand_string(ident): |  | ||||||
|     """ |  | ||||||
|     Creates a html-string for an entry. |  | ||||||
|  |  | ||||||
|     Parameters: |  | ||||||
|     ident: ident of an entry. |  | ||||||
|  |  | ||||||
|     Returns: |  | ||||||
|     string: html-formatted string string equivalent to the file. |  | ||||||
|     """ |  | ||||||
|     entry = db.get_entry_by_id(ident) |  | ||||||
|     content_string = "" |  | ||||||
|     if entry is not None: |  | ||||||
|         ident = entry.id |  | ||||||
|         title = entry.item.name |  | ||||||
|         year = entry.item.date |  | ||||||
|         text = entry.text |  | ||||||
|         rating = entry.rating |  | ||||||
|         username = entry.user.name |  | ||||||
|         reviewed = entry.reviewed |  | ||||||
|         content_string += "<h1>" + title + \ |  | ||||||
|             " (" + year + ") " |  | ||||||
|         content_string += rating_to_star(rating) |  | ||||||
|         content_string += "</h1>\n" |  | ||||||
|         content_string += "<small>rated " + str(rating) + \ |  | ||||||
|             "/100 by <a href=\"" + url_for("user", name=username) + "\">" + \ |  | ||||||
|             username + "</a> on <a href=\"" + \ |  | ||||||
|             url_for("index", _anchor=str(ident)) + "\">" + str(reviewed) + \ |  | ||||||
|             "</a></small><br>\n" |  | ||||||
|         content_string += "<small>[<a href=\"" + \ |  | ||||||
|             url_for("delete_entry", ident=ident) + \ |  | ||||||
|             "\">delete entry</a>]</small>" |  | ||||||
|         content_string += text + "<br>\n" |  | ||||||
|     return content_string |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_rss_string(): |  | ||||||
|     """ |  | ||||||
|     Create a rss-string of the blog and return it. |  | ||||||
|  |  | ||||||
|     Returns: |  | ||||||
|     string: rss-string of everything that is in the ENTRY_DIR. |  | ||||||
|     """ |  | ||||||
|     content_string = "" |  | ||||||
|     entries = db.get_entries() |  | ||||||
|     if entries is None: |  | ||||||
|         return "" |  | ||||||
|     entries.reverse() |  | ||||||
|     for entry in entries: |  | ||||||
|         ident = entry.id |  | ||||||
|         title = entry.item.name |  | ||||||
|         year = entry.item.date |  | ||||||
|         text = entry.text |  | ||||||
|         rating = entry.rating |  | ||||||
|         username = entry.user.name |  | ||||||
|         reviewed = entry.reviewed |  | ||||||
|         content_string += "<item>\n" |  | ||||||
|         content_string += "<title>" + title + "(" + year + ") " + \ |  | ||||||
|             rating_to_star(rating) + " by " + username + "</title>\n" |  | ||||||
|         content_string += "<guid>" + \ |  | ||||||
|             url_for("index", _anchor=str(ident), _external=True) + \ |  | ||||||
|             "</guid>\n" |  | ||||||
|         content_string += "<pubDate>" + reviewed + "</pubDate>\n" |  | ||||||
|         content_string += "<description>" + text + "</description>\n" |  | ||||||
|         content_string += "</item>\n" |  | ||||||
|     return content_string |  | ||||||
|   | |||||||
| @@ -4,9 +4,23 @@ | |||||||
| <div class="container"> | <div class="container"> | ||||||
|     <div class="archive"> |     <div class="archive"> | ||||||
|         <h1>Archive</h1><br> |         <h1>Archive</h1><br> | ||||||
|         {% autoescape off %} |         {% set ns = namespace(last_year="") %} | ||||||
|         {{ content_string }} |         {% for entry in entries %} | ||||||
|         {% endautoescape %} |         {% if entry.item.date != ns.last_year %} | ||||||
|  |         {% if ns.last_year != "" %} | ||||||
|  |         </ul> | ||||||
|  |         {% endif %} | ||||||
|  |         <h2> {{ entry.item.date }} </h2> | ||||||
|  |         <ul> | ||||||
|  |         {% endif %} | ||||||
|  |         {% set ns.last_year = entry.item.date %} | ||||||
|  |             <li> | ||||||
|  |                 {{ entry.item.name }} | ||||||
|  |                 <a href="{{ url_for('entry', ident=entry.id) }}"> | ||||||
|  |                     {{ r_to_star(entry.rating) }} by username | ||||||
|  |                 </a> | ||||||
|  |             </li><br> | ||||||
|  |         {% endfor %} | ||||||
|     </div> |     </div> | ||||||
| </div> | </div> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|   | |||||||
| @@ -4,9 +4,24 @@ | |||||||
| <div class="container"> | <div class="container"> | ||||||
|     <div class="blog"> |     <div class="blog"> | ||||||
|         <h1>Index</h1><br> |         <h1>Index</h1><br> | ||||||
|         {% autoescape off %} |         {% for entry in entries %} | ||||||
|         {{ content_string }} |         <div class="entry"> | ||||||
|         {% endautoescape %} |             <h1 id="{{ entry.id }}"> | ||||||
|  |                 <a href="{{ url_for('entry', ident=entry.id) }}"> | ||||||
|  |                     {{ entry.item.name }} ({{ entry.item.date }}) {{ r_to_star(entry.rating) }} | ||||||
|  |                 </a> | ||||||
|  |             </h1> | ||||||
|  |             <small> | ||||||
|  |                 rated {{ entry.rating }}/100 by | ||||||
|  |                 <a href="{{ url_for('user', name=entry.user.name) }}"> | ||||||
|  |                     {{ entry.user.name }} | ||||||
|  |                 </a> | ||||||
|  |             </small><br> | ||||||
|  |             {% autoescape off %} | ||||||
|  |             {{ entry.text }} | ||||||
|  |             {% endautoescape %} | ||||||
|  |         </div><br> | ||||||
|  |         {% endfor %} | ||||||
|     </div> |     </div> | ||||||
| </div> | </div> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|   | |||||||
| @@ -4,13 +4,26 @@ | |||||||
| <channel> | <channel> | ||||||
|     <title>{{ title }}</title> |     <title>{{ title }}</title> | ||||||
|     <description>{{ description }}</description> |     <description>{{ description }}</description> | ||||||
| <language>en-us</language> |     <language>en-us</language> | ||||||
| <link>{{ url_for("feed", _external=True) }}</link> |     <link>{{ url_for("feed", _external=True) }}</link> | ||||||
| <atom:link href="{{ url_for('feed', _external=True) }}" rel="self" type="application/rss+xml" /> |     <atom:link href="{{ url_for('feed', _external=True) }}" rel="self" type="application/rss+xml" /> | ||||||
|  |     {% for entry in entries %} | ||||||
| {% autoescape off %} |     <item> | ||||||
| {{ content_string }} |         <title> | ||||||
| {% endautoescape %} |             {{ entry.item.name }} ({{ entry.item.date }}) {{ r_to_star(entry.rating) }} by {{ entry.user.name }} | ||||||
|  |         </title> | ||||||
|  |         <guid> | ||||||
|  |             {{ url_for("index", _anchor=entry.id, _external=True) }} | ||||||
|  |         </guid> | ||||||
|  |         <pubDate> | ||||||
|  |             {{ entry.reviewed }} | ||||||
|  |         </pubDate> | ||||||
|  |         <description> | ||||||
|  |             {% autoescape off %} | ||||||
|  |             text | ||||||
|  |             {% endautoescape %} | ||||||
|  |         </description> | ||||||
|  |     </item> | ||||||
|  |     {% endfor %} | ||||||
| </channel> | </channel> | ||||||
| </rss> | </rss> | ||||||
|   | |||||||
| @@ -3,9 +3,32 @@ | |||||||
| {% block content %} | {% block content %} | ||||||
| <div class="container"> | <div class="container"> | ||||||
|     <div class="standalone"> |     <div class="standalone"> | ||||||
|  |         <h1> | ||||||
|  |             {{ entry.item.name }} ({{ entry.item.date }}) | ||||||
|  |             {{ r_to_star(entry.rating) }} | ||||||
|  |         </h1> | ||||||
|  |         <small> | ||||||
|  |             rated {{ entry.rating }}/100 by | ||||||
|  |             <a href="{{ url_for('user', name=entry.user.name) }}"> | ||||||
|  |                 {{ entry.user.name }} | ||||||
|  |             </a> | ||||||
|  |             on | ||||||
|  |             <a href="{{ url_for('index', _anchor=entry.id) }}"> | ||||||
|  |                 {{ entry.reviewed }} | ||||||
|  |             </a> | ||||||
|  |         </small><br> | ||||||
|  |         {% if current_user.id == entry.user.id %} | ||||||
|  |         <small> | ||||||
|  |             [ | ||||||
|  |             <a href="{{ url_for('delete_entry', ident=entry.id) }}"> | ||||||
|  |                 delete entry | ||||||
|  |             </a> | ||||||
|  |             ] | ||||||
|  |         </small><br> | ||||||
|  |         {% endif %} | ||||||
|         {% autoescape off %} |         {% autoescape off %} | ||||||
|         {{ content_string }} |         {{ entry.text }} | ||||||
|         {% endautoescape %} |         {% endautoescape %}<br> | ||||||
|     </div> |     </div> | ||||||
| </div> | </div> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|   | |||||||
| @@ -4,6 +4,23 @@ | |||||||
| <div class="container"> | <div class="container"> | ||||||
|     <div class="archive"> |     <div class="archive"> | ||||||
|         <h1>User: {{ User }}</h1><br> |         <h1>User: {{ User }}</h1><br> | ||||||
|  |         {% set ns = namespace(last_year="") %} | ||||||
|  |         {% for entry in entries %} | ||||||
|  |         {% if entry.item.date != ns.last_year %} | ||||||
|  |         {% if ns.last_year != "" %} | ||||||
|  |         </ul> | ||||||
|  |         {% endif %} | ||||||
|  |         <h2> {{ entry.item.date }} </h2> | ||||||
|  |         <ul> | ||||||
|  |         {% endif %} | ||||||
|  |         {% set ns.last_year = entry.item.date %} | ||||||
|  |             <li> | ||||||
|  |                 {{ entry.item.name }} | ||||||
|  |                 <a href="{{ url_for('entry', ident=entry.id) }}"> | ||||||
|  |                     {{ r_to_star(entry.rating) }} by username | ||||||
|  |                 </a> | ||||||
|  |             </li><br> | ||||||
|  |         {% endfor %} | ||||||
|         {% autoescape off %} |         {% autoescape off %} | ||||||
|         {{ content_string }} |         {{ content_string }} | ||||||
|         {% endautoescape %} |         {% endautoescape %} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user