--- a/.hgignore Mon Feb 11 14:10:22 2013 +0100
+++ b/.hgignore Mon Feb 11 14:14:24 2013 +0100
@@ -11,4 +11,5 @@
\.DS_Store$
^web/static/media
^src/log\.txt$
-^run/log/
\ No newline at end of file
+^run/log/
+^log$
\ No newline at end of file
--- a/src/egonomy/config.py.tmpl Mon Feb 11 14:10:22 2013 +0100
+++ b/src/egonomy/config.py.tmpl Mon Feb 11 14:14:24 2013 +0100
@@ -6,7 +6,8 @@
WEB_URL = 'http://localhost/'
STATIC_URL = BASE_URL + 'static/site/'
-LOGIN_URL = BASE_URL + "ego/login/"
+# if necessary
+#EGONOMY_BASE_URL = BASE_URL + 'ego/'
DEBUG = True
--- a/src/egonomy/settings.py Mon Feb 11 14:10:22 2013 +0100
+++ b/src/egonomy/settings.py Mon Feb 11 14:14:24 2013 +0100
@@ -160,3 +160,9 @@
}
from .config import * #@UnusedWildImport
+
+if not "EGONOMY_BASE_URL" in locals():
+ EGONOMY_BASE_URL = BASE_URL + 'ego/'
+
+if not "LOGIN_URL" in locals():
+ LOGIN_URL = EGONOMY_BASE_URL + 'login/'
\ No newline at end of file
--- a/src/egonomy/static/egonomy/css/egonomy.css Mon Feb 11 14:10:22 2013 +0100
+++ b/src/egonomy/static/egonomy/css/egonomy.css Mon Feb 11 14:14:24 2013 +0100
@@ -331,3 +331,8 @@
a.clear-fragment {
color: #800000;
}
+
+/* loginform_div style */
+#loginform_div, #loginform_div ul, #loginform_div li{
+ margin: 10px 0 5px;
+}
--- a/src/egonomy/templates/egonomy_all_fragments.html Mon Feb 11 14:10:22 2013 +0100
+++ b/src/egonomy/templates/egonomy_all_fragments.html Mon Feb 11 14:14:24 2013 +0100
@@ -14,7 +14,7 @@
<ul class="fullwidth">
{% for frg in results %}
<li class="subcol_all">
- <a href="{% url 'view_fragment' fragment_pk=prg.pk %}">
+ <a href="{% url 'view_fragment' fragment_pk=frg.pk %}">
<div class="center-image">
<div class="image-and-fragment">
{% with frg.image.info.image_file as image %}
--- a/src/egonomy/templates/egonomy_home.html Mon Feb 11 14:10:22 2013 +0100
+++ b/src/egonomy/templates/egonomy_home.html Mon Feb 11 14:14:24 2013 +0100
@@ -46,7 +46,7 @@
{% endif %}
{% endwith %}
</div>
- <h3>{{ img.metadata.titre }} : {{img.date_modif}}</h3></a>
+ <h3>{{ img.metadata.titre }}</h3></a>
<p>{% trans "Annotated by" %} <strong>{{ img.metadata.auteur }}</strong></p>
</li>
{% endfor %}
--- a/src/egonomy/templates/registration/login.html Mon Feb 11 14:10:22 2013 +0100
+++ b/src/egonomy/templates/registration/login.html Mon Feb 11 14:14:24 2013 +0100
@@ -8,7 +8,7 @@
{% if form.errors %}
<p class="error">{% trans "Sorry, that's not a valid username or password." %}</p>
{% endif %}
- <div class="span-24 last">
+ <div class="fullwidth">
<form action="" method='post' id="login-form">
<div id="loginform_div" class="span-12">
{% csrf_token %}
--- a/src/egonomy/views.py Mon Feb 11 14:10:22 2013 +0100
+++ b/src/egonomy/views.py Mon Feb 11 14:14:24 2013 +0100
@@ -5,7 +5,9 @@
from django.template import RequestContext
from models import Image, Fragment
from django.db.models.aggregates import Max
+import logging
+logger = logging.getLogger(__name__)
def home(request):
@@ -19,9 +21,11 @@
if "field" in request.GET:
field = request.GET["field"]
-
- img_list = Image.objects.annotate(date_modif=Max('fragment__date_saved')).exclude(date_modif=None).order_by('-date_modif')[:12]
- frg_list = Fragment.objects.all().order_by('-date_saved')[:12]
+ # We force list() because if not, img_id_list is a valuelistqueryset and not a list of values.
+ # We separate image requests and make requests with select_related to optimize database hits.
+ img_id_list = list(Image.objects.values_list('id', flat=True).annotate(date_modif=Max('fragment__date_saved')).exclude(date_modif=None).order_by('-date_modif')[:12])
+ img_list = Image.objects.filter(id__in=img_id_list).select_related('info', 'metadata')
+ frg_list = Fragment.objects.all().order_by('-date_saved').select_related('image', 'image__info', 'image__metadata','author')[:12]
return render_to_response("egonomy_home.html",
{'img_list':img_list, 'fragment_list':frg_list, "search":search, "nb_results":nb_results},
@@ -30,10 +34,12 @@
def annotate_picture(request, image_id):
- img = get_object_or_404(Image, id=image_id)
- frg_list = Fragment.objects.filter(image=img).order_by('-date_saved')
+ img = get_object_or_404(Image.objects.select_related('info', 'metadata'), id=image_id)
+
+ # We force list() to get only one database hit instead of 3 (first request, count, [0])
+ frg_list = list(Fragment.objects.filter(image=img).order_by('-date_saved').select_related('image', 'image__info', 'image__metadata','author'))
last_frg = None
- if frg_list.count()>0:
+ if len(frg_list)>0:
last_frg = frg_list[0]
return render_to_response("egonomy_annotate_picture.html",
@@ -43,8 +49,8 @@
def view_fragment(request, fragment_pk):
- frg = get_object_or_404(Fragment, pk=fragment_pk)
- frg_list = Fragment.objects.filter(image=frg.image)
+ frg = get_object_or_404(Fragment.objects.select_related('image', 'image__info', 'image__metadata','author'), pk=fragment_pk)
+ frg_list = Fragment.objects.filter(image=frg.image).select_related('image', 'image__info', 'image__metadata','author')
return render_to_response("egonomy_view_fragment.html",
{'fragment': frg, 'fragment_list': frg_list},
@@ -53,8 +59,8 @@
@login_required
def create_fragment(request, image_id):
- img = get_object_or_404(Image, id=image_id)
- frg_list = Fragment.objects.filter(image=img)
+ img = get_object_or_404(Image.objects.select_related('info', 'metadata'), id=image_id)
+ frg_list = Fragment.objects.filter(image=img).order_by('-date_saved').select_related('image', 'image__info', 'image__metadata','author')
return render_to_response("egonomy_create_fragment.html",
{'img': img, 'fragment_list': frg_list},
@@ -89,7 +95,7 @@
cur_page_nb = request.GET.get("page") or 1
cur_page_nb = int(cur_page_nb)
- img_list = Image.objects.all().order_by('pk')
+ img_list = Image.objects.all().order_by('pk').select_related('info', 'metadata')
nb = 32
paginator = Paginator(img_list, nb)
try:
@@ -108,7 +114,7 @@
cur_page_nb = request.GET.get("page") or 1
cur_page_nb = int(cur_page_nb)
- frg_list = Fragment.objects.all().order_by('pk')
+ frg_list = Fragment.objects.all().order_by('pk').select_related('image', 'image__info', 'image__metadata','author')
nb = 32
paginator = Paginator(frg_list, nb)
try: