ajout de blog_search.jinja2
This commit is contained in:
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
- Install the project in editable mode with its testing requirements.
|
- Install the project in editable mode with its testing requirements.
|
||||||
|
|
||||||
` env/bin/pip install -e ".[testing]" `
|
` env/bin/pip install -e ".[testing]" `
|
||||||
|
|
||||||
- Initialize and upgrade the database using Alembic.
|
- Initialize and upgrade the database using Alembic.
|
||||||
|
|
||||||
|
|||||||
BIN
cao_blogr.sqlite
BIN
cao_blogr.sqlite
Binary file not shown.
@@ -18,6 +18,9 @@ class BlogCreateForm(Form):
|
|||||||
class BlogUpdateForm(BlogCreateForm):
|
class BlogUpdateForm(BlogCreateForm):
|
||||||
id = IntegerField(widget=HiddenInput())
|
id = IntegerField(widget=HiddenInput())
|
||||||
|
|
||||||
|
class BlogSearchForm(Form):
|
||||||
|
criteria = StringField('Critère', validators=[InputRequired(), Length(min=3, max=45)],
|
||||||
|
filters=[strip_filter])
|
||||||
|
|
||||||
class UserCreateForm(Form):
|
class UserCreateForm(Form):
|
||||||
username = StringField('Nom', [validators.required(), validators.Length(min=1, max=255)],
|
username = StringField('Nom', [validators.required(), validators.Length(min=1, max=255)],
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ def includeme(config):
|
|||||||
config.add_route('apropos', '/apropos')
|
config.add_route('apropos', '/apropos')
|
||||||
config.add_route('blog', '/blog/{id:\d+}/{slug}')
|
config.add_route('blog', '/blog/{id:\d+}/{slug}')
|
||||||
config.add_route('blog_edit', '/blog_edit/{id}')
|
config.add_route('blog_edit', '/blog_edit/{id}')
|
||||||
config.add_route('page_search', '/page_search')
|
config.add_route('blog_search', '/blog_search')
|
||||||
config.add_route('login', '/login')
|
config.add_route('login', '/login')
|
||||||
config.add_route('logout', '/logout')
|
config.add_route('logout', '/logout')
|
||||||
config.add_route('users', '/users')
|
config.add_route('users', '/users')
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
import datetime #<- will be used to set default dates on models
|
import datetime #<- will be used to set default dates on models
|
||||||
|
|
||||||
|
from sqlalchemy import or_
|
||||||
from paginate_sqlalchemy import SqlalchemyOrmPage #<- provides pagination
|
from paginate_sqlalchemy import SqlalchemyOrmPage #<- provides pagination
|
||||||
from ..models.blog_record import BlogRecord
|
from ..models.blog_record import BlogRecord
|
||||||
from markdown2 import Markdown
|
from markdown2 import Markdown
|
||||||
@@ -13,6 +14,13 @@ class BlogRecordService(object):
|
|||||||
query = request.dbsession.query(BlogRecord)
|
query = request.dbsession.query(BlogRecord)
|
||||||
return query.order_by(sa.desc(BlogRecord.created))
|
return query.order_by(sa.desc(BlogRecord.created))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def by_criteria(cls, request, criteria):
|
||||||
|
search = "%{}%".format(criteria)
|
||||||
|
query = request.dbsession.query(BlogRecord).filter(or_(BlogRecord.title.like(search),
|
||||||
|
BlogRecord.body.like(search))).all()
|
||||||
|
return query
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def by_id(cls, request, _id):
|
def by_id(cls, request, _id):
|
||||||
query = request.dbsession.query(BlogRecord)
|
query = request.dbsession.query(BlogRecord)
|
||||||
|
|||||||
51
cao_blogr/templates/blog_search.jinja2
Normal file
51
cao_blogr/templates/blog_search.jinja2
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{% extends "cao_blogr:templates/layout.jinja2" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<form id="search-form" class="form-horizontal" role="form" action="/blog_search" method="post">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-8">
|
||||||
|
<div class="input-group" align="center">
|
||||||
|
{{ form.criteria(class_='form-control') }}
|
||||||
|
<span class="input-group-btn">
|
||||||
|
<button id="submitButton" class="btn btn-primary" type="submit" name="form.submitted">
|
||||||
|
Rechercher
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{% for error in form.criteria.errors %}
|
||||||
|
<div class="text-danger">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
{% if items %}
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Titre</th>
|
||||||
|
<th>Tags</th>
|
||||||
|
<th>Date</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for entry in items %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">
|
||||||
|
{{ entry.title }}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>{{ entry.tag }}</td>
|
||||||
|
<td>{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -32,12 +32,12 @@
|
|||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
</button>
|
||||||
<a class="navbar-brand" href="{{ request.route_url('home') }}">CTP Blog</a>
|
<a class="navbar-brand" href="{{ request.route_url('home') }}">CAO Blogr</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse navbar-collapse" id="myNavbar">
|
<div class="collapse navbar-collapse" id="myNavbar">
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
<li><a href="#band">TAGS</a></li>
|
<li><a href="#band">TAGS</a></li>
|
||||||
<li><a href="{{ request.route_url('page_search') }}"><span class="glyphicon glyphicon-search"></span></a></li>
|
<li><a href="{{ request.route_url('blog_search') }}"><span class="glyphicon glyphicon-search"></span></a></li>
|
||||||
<!-- si anonyme, lien pour se connecter -->
|
<!-- si anonyme, lien pour se connecter -->
|
||||||
{% if request.authenticated_userid %}
|
{% if request.authenticated_userid %}
|
||||||
<li><a href="{{request.route_url('logout')}}">
|
<li><a href="{{request.route_url('logout')}}">
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from pyramid.view import view_config
|
|||||||
from pyramid.httpexceptions import HTTPNotFound, HTTPFound
|
from pyramid.httpexceptions import HTTPNotFound, HTTPFound
|
||||||
from ..models.blog_record import BlogRecord
|
from ..models.blog_record import BlogRecord
|
||||||
from ..services.blog_record import BlogRecordService
|
from ..services.blog_record import BlogRecordService
|
||||||
from ..forms import BlogCreateForm, BlogUpdateForm
|
from ..forms import BlogCreateForm, BlogUpdateForm, BlogSearchForm
|
||||||
|
|
||||||
|
|
||||||
@view_config(route_name='blog',
|
@view_config(route_name='blog',
|
||||||
@@ -66,3 +66,23 @@ def blog_edit(request):
|
|||||||
'form': form,
|
'form': form,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@view_config(route_name='blog_search',
|
||||||
|
renderer='cao_blogr:templates/blog_search.jinja2')
|
||||||
|
def blog_search(request):
|
||||||
|
|
||||||
|
criteria = ''
|
||||||
|
form = BlogSearchForm(request.POST)
|
||||||
|
items = []
|
||||||
|
if 'form.submitted' in request.params and form.validate():
|
||||||
|
criteria = request.params['criteria']
|
||||||
|
# si afficher tous les fiches ?
|
||||||
|
items = BlogRecordService.by_criteria(request, criteria)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': "Rechercher",
|
||||||
|
'form': form,
|
||||||
|
'items': items,
|
||||||
|
'criteria': criteria,
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user