Updated Large app how to (markdown)
parent
9c94062572
commit
266ee5989a
1 changed files with 58 additions and 1 deletions
|
|
@ -233,6 +233,62 @@ The view is where we'll declare our Blueprint. Using url_prefix will prefix ever
|
||||||
|
|
||||||
## First template
|
## First template
|
||||||
|
|
||||||
|
Jinja is integrated within Flask. One of the great feature of Jinja is the inheritance and the logic available (conditional structure, loop, context modification...). We'll create a `base.html` template from which we'll inherit from on each of our template. You can even have more than 1 inheritance (like having your template inheriting from twocolumn.html template which itself inherit from main.html)
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>{% block title %}My Site{% endblock %}</title>
|
||||||
|
{% block css %}
|
||||||
|
<link rel="stylesheet" href="/static/css/reset-min.css" />
|
||||||
|
<link rel="stylesheet" href="/static/css/main.css" />
|
||||||
|
{% endblock %}
|
||||||
|
{% block script %}
|
||||||
|
<script src="src="/static/js/main.js" type="text/javascript"></script>
|
||||||
|
{% endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="header>{% block header %}{% endblock%}</div>
|
||||||
|
<div id="content>{% block content %}{% endblock%}</div>
|
||||||
|
<div id="footer>{% block footer %}{% endblock%}</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
Now we won't have to redefine our html structure anymore, and any modification done on `base.py` will be visible on all your child templates. Here is the `/app/templates/users/register.html` template (It's a good habit to use the view name to for the template file name).
|
||||||
|
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
{% from "forms/macros.html" import render_field %}
|
||||||
|
<form method="POST" action="." class="form">
|
||||||
|
{{ form.csrf }}
|
||||||
|
{{ render_field(form.name, class="input text") }}
|
||||||
|
{{ render_field(form.email, class="input text") }}
|
||||||
|
{{ render_field(form.password, class="input text") }}
|
||||||
|
{{ render_field(form.confirm, class="input text") }}
|
||||||
|
{{ render_field(form.accept_tos, class="input checkbox") }}
|
||||||
|
<label>Repcaptcha</label>
|
||||||
|
{{ form.repcaptcha }}
|
||||||
|
<input type="submit" value="Register" class="button green">
|
||||||
|
</form>
|
||||||
|
<a href="{{ url_for('restaurant.register') }}">Register a restaurant</a>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
This template will use a macro to automate the construction of html fields. This macro will be stored in `/app/forms/macros.html` (since this macro will be called in different module, we'll store it in a separated file).
|
||||||
|
|
||||||
|
{% macro render_field(field) %}
|
||||||
|
<div class="form_field">
|
||||||
|
{{ field.label(class="label") }}
|
||||||
|
{% if field.errors %}
|
||||||
|
{% set css_class = 'has_error ' + kwargs.pop('class', '') %}
|
||||||
|
{{ field(class=css_class, **kwargs) }}
|
||||||
|
<ul class="errors">{% for error in field.errors %}<li>{{ error|e }}</li>{% endfor %}</ul>
|
||||||
|
{% else %}
|
||||||
|
{{ field(**kwargs) }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Settings up the app
|
## Settings up the app
|
||||||
|
|
||||||
Here is the `/app/__init__.py`
|
Here is the `/app/__init__.py`
|
||||||
|
|
@ -253,3 +309,4 @@ Here is the `/app/__init__.py`
|
||||||
from app.users.views import mod as usersModule
|
from app.users.views import mod as usersModule
|
||||||
|
|
||||||
app.register_blueprint(usersModule)
|
app.register_blueprint(usersModule)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue