finalize topic template
This commit is contained in:
BIN
cao_blogr.sqlite
BIN
cao_blogr.sqlite
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
from wtforms import Form, StringField, TextAreaField, SelectField
|
||||
from wtforms import IntegerField, PasswordField
|
||||
from wtforms.validators import InputRequired, DataRequired, Length
|
||||
from wtforms.validators import InputRequired, Length
|
||||
from wtforms.widgets import HiddenInput
|
||||
|
||||
strip_filter = lambda x: x.strip() if x else None
|
||||
@@ -10,7 +10,7 @@ class BlogCreateForm(Form):
|
||||
filters=[strip_filter])
|
||||
body = TextAreaField('Corps du texte', validators=[InputRequired(), Length(min=1)],
|
||||
filters=[strip_filter])
|
||||
tag = SelectField('Tag', validators=[DataRequired()], id='select_tag')
|
||||
tag = SelectField('Sous-rubrique')
|
||||
|
||||
|
||||
class BlogUpdateForm(BlogCreateForm):
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
def includeme(config):
|
||||
config.add_static_view('static', 'static', cache_max_age=3600)
|
||||
config.add_route('home', '/')
|
||||
config.add_route('admin', '/admin')
|
||||
config.add_route('apropos', '/apropos')
|
||||
config.add_route('blog', '/blog/{id:\d+}/{slug}')
|
||||
config.add_route('blog_edit', '/blog_edit/{id}')
|
||||
config.add_route('blog_edit', '/blog_edit/{topic}/{id}')
|
||||
config.add_route('blog_search', '/blog_search')
|
||||
config.add_route('login', '/login')
|
||||
config.add_route('logout', '/logout')
|
||||
|
||||
@@ -10,9 +10,9 @@ from markdown2 import Markdown
|
||||
class BlogRecordService(object):
|
||||
|
||||
@classmethod
|
||||
def by_topic(cls, request, topic):
|
||||
def by_topic(cls, request, topic, tag):
|
||||
# get posts by topic
|
||||
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id == topic)
|
||||
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id == topic, BlogRecord.tag == tag)
|
||||
query = query.order_by(BlogRecord.tag, BlogRecord.title).all()
|
||||
return query
|
||||
|
||||
@@ -25,8 +25,8 @@ class BlogRecordService(object):
|
||||
|
||||
@classmethod
|
||||
def by_id(cls, request, _id):
|
||||
query = request.dbsession.query(BlogRecord)
|
||||
return query.get(_id)
|
||||
query = request.dbsession.query(BlogRecord).filter(BlogRecord.id == _id).first()
|
||||
return query
|
||||
|
||||
@classmethod
|
||||
def get_last_five(cls, request):
|
||||
@@ -39,12 +39,12 @@ class BlogRecordService(object):
|
||||
def get_tags_byTopic(cls, request, topic):
|
||||
# gest the last 5 items modified
|
||||
query = request.dbsession.query(Tags).filter(Tags.topic == topic)
|
||||
query = query.order_by(Tags.tag).all()
|
||||
query = query.order_by(Tags.tag_name).all()
|
||||
return query
|
||||
|
||||
@classmethod
|
||||
def get_topic_name(cls, request, id):
|
||||
# gest the last 5 items modified
|
||||
# gest the name of a given topic
|
||||
query = request.dbsession.query(Topics).filter(Topics.topic == id).first()
|
||||
return query.topic_name.upper()
|
||||
|
||||
|
||||
@@ -146,3 +146,8 @@ textarea {
|
||||
color: red;
|
||||
margin-left:2px;
|
||||
}
|
||||
|
||||
.icone-big {
|
||||
color: #f4511e;
|
||||
font-size: 50px;
|
||||
}
|
||||
|
||||
23
cao_blogr/templates/admin.jinja2
Normal file
23
cao_blogr/templates/admin.jinja2
Normal file
@@ -0,0 +1,23 @@
|
||||
{% extends "cao_blogr:templates/layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row text-center">
|
||||
<div class="col-sm-3">
|
||||
<a href=" {{request.route_url('users')}} "><span class="glyphicon glyphicon-user icone-big"></span></a>
|
||||
<h4>UTILISATEURS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href=" {{request.route_url('users')}} "><span class="glyphicon glyphicon-user icone-big"></span></a>
|
||||
<h4>TOPICS / TAGS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href=" {{request.route_url('topic', topic='ADM')}} "><span class="glyphicon glyphicon-file icone-big"></span></a>
|
||||
<h4>PAGES ADMIN</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
{% if request.authenticated_userid %}
|
||||
<p>
|
||||
<a href="{{ request.route_url('home') }}">[ Retour ]</a>
|
||||
<a href="{{ request.route_url('blog_edit', id=entry.id) }}">[ Modifier ]</a>
|
||||
<a href="{{ request.route_url('topic', topic=entry.topic_id) }}">[ Retour ]</a>
|
||||
<a href="{{ request.route_url('blog_edit', topic=entry.topic_id, id=entry.id) }}">[ Modifier ]</a>
|
||||
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
@@ -20,37 +20,27 @@
|
||||
{{ form.body(class_='form-control', cols="35", rows="20") }}
|
||||
</div>
|
||||
|
||||
{% for error in form.topic.errors %}
|
||||
<div class="error">{{ error }}</div>
|
||||
{% endfor %}
|
||||
<div class="form-group">
|
||||
<label class="required-field" for="topic">{{ form.topic.label }}</label>
|
||||
{{ form.topic(class_='form-control') }}
|
||||
</div>
|
||||
|
||||
{% for error in form.tag.errors %}
|
||||
<div class="text-danger">{{ error }}</div>
|
||||
{% endfor %}
|
||||
<div class="form-group">
|
||||
<label class="required-field" for="tag">{{ form.tag.label }}</label>
|
||||
{{ form.tag(class_='form-control') }}
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Topic : <strong>{{ entry.topic }}</strong>
|
||||
|
|
||||
Tag : <strong>{{ entry.tag }}</strong>
|
||||
Topic : <strong>{{ entry.topic_id }}</strong>
|
||||
{% if blog_id != '0' %}
|
||||
|
|
||||
Créé le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong>
|
||||
|
|
||||
Modifié le : <strong>{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}</strong>
|
||||
{% endif %}
|
||||
</p>
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<a class="btn btn-default" href="{{ request.route_url('home') }}"><span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a class="btn btn-default" href="{{ request.route_url('topic', topic=entry.topic_id) }}">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
{% if action == 'edit' %}
|
||||
{% if blog_id != '0' %}
|
||||
<button class="btn btn-warning" type="submit" name="form.deleted">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
{% endif %}
|
||||
|
||||
@@ -149,7 +149,6 @@
|
||||
<!-- Container (POSTS Section) -->
|
||||
<div id="posts">
|
||||
<br>
|
||||
|
||||
<h2 class="text-center">DERNIERES PUBLICATIONS</h2>
|
||||
|
||||
<ul>
|
||||
@@ -174,7 +173,7 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4">
|
||||
<p><span class="glyphicon glyphicon-envelope"></span> Centre Méditation Sunyata Paris<br>
|
||||
<p><span class="glyphicon glyphicon-envelope"></span> Centre de Méditation Sunyata<br>
|
||||
116 bd Maréchal Foch<br>
|
||||
93160 NOISY LE GRAND
|
||||
</p>
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
| <a href="{{ request.route_url('topic', topic='FR2') }}">Pratique</a>
|
||||
| <a href="{{ request.route_url('topic', topic='FR3') }}">Qi Gong</a>
|
||||
| <a href="{{ request.route_url('topic', topic='FR4') }}">Sciences</a>
|
||||
| <a href="{{ request.route_url('topic', topic='FR9') }}">Méditation Sunyata</a>
|
||||
| <a href="{{ request.route_url('topic', topic='FR9') }}">A propos</a>
|
||||
|</big>
|
||||
</p>
|
||||
<p class="text-center">
|
||||
@@ -99,7 +99,7 @@
|
||||
 | <a href="{{ request.route_url('blog', id=1, slug='mentions-l%25C3%25A9gales') }}">Mentions légales</a>
|
||||
|
||||
{% if request.authenticated_userid == 'admin' %}
|
||||
 | <a href="{{request.route_url('users')}}">Utilisateurs</a>
|
||||
 | <a href="{{request.route_url('admin')}}">Admin</a>
|
||||
{% endif %}
|
||||
|
||||
</p>
|
||||
|
||||
@@ -3,21 +3,11 @@
|
||||
{% block content %}
|
||||
|
||||
{% if request.authenticated_userid %}
|
||||
<p><a href="{{ request.route_url('blog_edit', topic='topic', id='0') }}">
|
||||
<p><a href="{{ request.route_url('blog_edit', topic=topic, id='0') }}">
|
||||
[Nouveau post]</a>
|
||||
</p>
|
||||
{% endif%}
|
||||
|
||||
<ul>
|
||||
{% for entry in items %}
|
||||
<li>
|
||||
{{ entry.edited.strftime("%d-%m-%Y") }}
|
||||
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">
|
||||
<span class="glyphicon glyphicon-menu-right"></span> {{ entry.title }}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{{ liste | safe }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -29,18 +29,21 @@ def blog(request):
|
||||
renderer='cao_blogr:templates/blog_edit.jinja2',
|
||||
permission='view')
|
||||
def blog_edit(request):
|
||||
# get post id from request
|
||||
# get post parameters from request
|
||||
topic = request.matchdict['topic']
|
||||
blog_id = request.matchdict['id']
|
||||
url = request.route_url('blog_edit',id=blog_id)
|
||||
url = request.route_url('blog_edit',topic=topic, id=blog_id)
|
||||
|
||||
# get the list of tags of this topic
|
||||
tags = BlogRecordService.get_tags_byTopic(request, topic)
|
||||
|
||||
if blog_id == '0':
|
||||
# create a new post
|
||||
entry = BlogRecord()
|
||||
# set default values
|
||||
entry.tag = 'pyramid'
|
||||
entry.topic = 'blog'
|
||||
entry.topic_id = topic
|
||||
form = BlogCreateForm(request.POST, entry)
|
||||
form.tag.choices = [(row.tag, row.title) for row in BlogRecordService.tags]
|
||||
form.tag.choices = [(row.tag, row.tag_name) for row in tags]
|
||||
|
||||
else:
|
||||
# modify post
|
||||
entry = BlogRecordService.by_id(request, blog_id)
|
||||
@@ -48,15 +51,17 @@ def blog_edit(request):
|
||||
request.session.flash(u"Page non trouvée : %s" % blog_id, 'warning')
|
||||
return HTTPFound(location=request.route_url('home'))
|
||||
form = BlogUpdateForm(request.POST, entry)
|
||||
form.tag.choices = [(row.tag, row.tag_name) for row in tags]
|
||||
|
||||
if 'form.submitted' in request.params and form.validate():
|
||||
if blog_id == '0':
|
||||
form.populate_obj(entry)
|
||||
entry.title_url = entry.slug
|
||||
entry.topic_id = topic
|
||||
|
||||
request.dbsession.add(entry)
|
||||
|
||||
return HTTPFound(location=request.route_url('home'))
|
||||
return HTTPFound(location=request.route_url('topic', topic=topic))
|
||||
else:
|
||||
del form.id # SECURITY: prevent overwriting of primary key
|
||||
form.populate_obj(entry)
|
||||
@@ -70,6 +75,7 @@ def blog_edit(request):
|
||||
'page_title': entry.title,
|
||||
'url': url,
|
||||
'form': form,
|
||||
'blog_id': blog_id,
|
||||
'entry': entry,
|
||||
}
|
||||
|
||||
@@ -101,12 +107,25 @@ def topic(request):
|
||||
|
||||
# get the topic_name
|
||||
topic_name = BlogRecordService.get_topic_name(request, topic)
|
||||
# get all the tags of this topic
|
||||
tags = BlogRecordService.get_tags_byTopic(request, topic)
|
||||
|
||||
# generate the items list group by tag
|
||||
liste = ''
|
||||
for tag in tags:
|
||||
liste += '<h3>' + tag.tag_name + '</h3>'
|
||||
# lire toutes les docs du topic
|
||||
items = BlogRecordService.by_topic(request, topic)
|
||||
|
||||
items = BlogRecordService.by_topic(request, topic, tag.tag)
|
||||
if items:
|
||||
liste += '<ul>'
|
||||
for item in items:
|
||||
liste += '<li>{0} <a href="{1}"><span class="glyphicon glyphicon-menu-right"></span>{2}</a></li>'.format(
|
||||
item.edited.strftime("%d-%m-%Y"), request.route_url('blog', id=item.id, slug=item.slug), item.title)
|
||||
liste += '</ul>'
|
||||
else:
|
||||
liste += '<ul><li> </li></ul>'
|
||||
return {
|
||||
'page_title': topic_name,
|
||||
'topic': topic,
|
||||
'items': items,
|
||||
'liste': liste,
|
||||
}
|
||||
|
||||
@@ -33,6 +33,15 @@ def home(request):
|
||||
}
|
||||
|
||||
|
||||
@view_config(route_name='admin',
|
||||
renderer='cao_blogr:templates/admin.jinja2')
|
||||
def admin(request):
|
||||
|
||||
return {
|
||||
'page_title': "Admin",
|
||||
}
|
||||
|
||||
|
||||
@view_config(route_name='apropos',
|
||||
renderer='cao_blogr:templates/apropos.jinja2')
|
||||
def apropos(request):
|
||||
|
||||
Reference in New Issue
Block a user