diff options
-rw-r--r-- | chimere/templates/base.html | 6 | ||||
-rw-r--r-- | chimere/templates/categories.html | 8 | ||||
-rw-r--r-- | chimere/templates/detail.html | 2 | ||||
-rw-r--r-- | chimere/templates/main_map.html | 2 | ||||
-rw-r--r-- | chimere/templates/upload_file.html | 6 | ||||
-rw-r--r-- | chimere/views.py | 46 | ||||
-rw-r--r-- | chimere/widgets.py | 36 | ||||
-rw-r--r-- | docs/upgrade.rst | 10 | ||||
-rw-r--r-- | example_project/settings.py.example | 50 | ||||
-rw-r--r-- | example_project/urls.py | 2 |
10 files changed, 118 insertions, 50 deletions
diff --git a/chimere/templates/base.html b/chimere/templates/base.html index f8a057d..67322f6 100644 --- a/chimere/templates/base.html +++ b/chimere/templates/base.html @@ -5,13 +5,13 @@ <head> <title>{% block title %}Chimère{% endblock %}</title> <script type="text/javascript"><!-- - var media_path = '{{media_path}}'; + var media_path = '{{STATIC_URL}}'; var extra_url = "{{extra_url}}"; // --></script> <script type="text/javascript" src="{{JQUERY_URL}}"></script> {% block extra_head %}{{extra_head|safe}}{% endblock %} - <link rel="stylesheet" href="{{media_path}}styles.css" /> - {%if css_area%}<link rel="stylesheet" href="{{media_path}}{{css_area}}" />{%endif%} + <link rel="stylesheet" href="{{STATIC_URL}}styles.css" /> + {%if css_area%}<link rel="stylesheet" href="{{STATIC_URL}}{{css_area}}" />{%endif%} {% block head %}{% endblock %} </head> diff --git a/chimere/templates/categories.html b/chimere/templates/categories.html index 5646075..db3d827 100644 --- a/chimere/templates/categories.html +++ b/chimere/templates/categories.html @@ -2,18 +2,18 @@ <ul id='ul_categories'> {% for category, lst_sub_categories in sub_categories %} <li> - <img class='control_image' id='maincategory_img_{{category.id}}' alt='control' src='{{media_path}}icons/{% if category.selected %}minus.png{%else%}plus.png{%endif%}' onclick='toggleCategory(this);'/> + <img class='control_image' id='maincategory_img_{{category.id}}' alt='control' src='{{STATIC_URL}}icons/{% if category.selected %}minus.png{%else%}plus.png{%endif%}' onclick='toggleCategory(this);'/> <input type="checkbox" id='checkall_{{category.id}}' onclick="checkAll(this);loadGeoObjects();"> {% trans category.name %} -<img class='zoom_image' alt='{% trans "Zoom to" %} {{category.name}}' src='{{media_path}}icons/zoom.png' onclick='zoomToCategory({{category.id}})'/> +<img class='zoom_image' alt='{% trans "Zoom to" %} {{category.name}}' src='{{STATIC_URL}}icons/zoom.png' onclick='zoomToCategory({{category.id}})'/> <ul class='subcategories' id='maincategory_{{category.id}}'{% if not category.selected %} style='display:None'{% endif %}> {% for sub_category in lst_sub_categories %} <li id='li_sub_{{sub_category.id}}'> <input type='checkbox' onclick='loadGeoObjects()' name='category_{{sub_category.id}}' id='category_{{sub_category.id}}'{% if sub_category.selected %} checked='checked'{% endif %}/> <label for='category_{{sub_category.id}}'> - <img alt='{{sub_category.name}}' src='{{media_path}}{{sub_category.icon.image}}'/> + <img alt='{{sub_category.name}}' src='{{STATIC_URL}}{{sub_category.icon.image}}'/> {% trans sub_category.name %}</label> - <img class='zoom_image' alt='{% trans "Zoom to" %} {{sub_category.name}}' src='{{media_path}}icons/zoom.png' onclick='zoomToSubCategory({{sub_category.id}})'/> + <img class='zoom_image' alt='{% trans "Zoom to" %} {{sub_category.name}}' src='{{STATIC_URL}}icons/zoom.png' onclick='zoomToSubCategory({{sub_category.id}})'/> </li>{% endfor %} {%if category.description%}<li><a href='#' onclick='displayCategoryDetail({{category.id}});'>{%trans "Tell me more..."%}</a></li>{%endif%} </ul> diff --git a/chimere/templates/detail.html b/chimere/templates/detail.html index a1b61b6..c35f664 100644 --- a/chimere/templates/detail.html +++ b/chimere/templates/detail.html @@ -2,7 +2,7 @@ {% load sanitize %} <h2>{{ marker.name }}</h2> <div id='detail_content'> -{% if marker.picture %}<img src='{{media_path}}{{marker.picture}}' alt='{{marker.name}}'/>{%endif%} +{% if marker.picture %}<img src='{{STATIC_URL}}{{marker.picture}}' alt='{{marker.name}}'/>{%endif%} <div> {% if dated %} <p id='detail_start_date'><label>{% trans "Date:" %}</label> <span>{{marker.start_date|date:"D d M Y"}} diff --git a/chimere/templates/main_map.html b/chimere/templates/main_map.html index 8b8cc2e..b426c25 100644 --- a/chimere/templates/main_map.html +++ b/chimere/templates/main_map.html @@ -15,7 +15,7 @@ {%if areas%}<div id='areas'> <h2>{% trans "Shortcuts"%}</h2> <ul>{% for area in areas%} -<li><img class='zoom_image' alt='{% trans "Zoom to" %} {{area.name}}' src='{{media_path}}icons/zoom.png' onclick='zoomToArea({{area.upper_left_corner.x|unlocalize_point}}, {{area.upper_left_corner.y|unlocalize_point}}, {{area.lower_right_corner.x|unlocalize_point}}, {{area.lower_right_corner.y|unlocalize_point}}); loadGeoObjects();'/> {{area.name}}</li>{%endfor%} +<li><img class='zoom_image' alt='{% trans "Zoom to" %} {{area.name}}' src='{{STATIC_URL}}icons/zoom.png' onclick='zoomToArea({{area.upper_left_corner.x|unlocalize_point}}, {{area.upper_left_corner.y|unlocalize_point}}, {{area.lower_right_corner.x|unlocalize_point}}, {{area.lower_right_corner.y|unlocalize_point}}); loadGeoObjects();'/> {{area.name}}</li>{%endfor%} </ul> </div>{%endif%} diff --git a/chimere/templates/upload_file.html b/chimere/templates/upload_file.html index 0ef276d..d08f723 100644 --- a/chimere/templates/upload_file.html +++ b/chimere/templates/upload_file.html @@ -5,12 +5,12 @@ <head> <title>{% block title %}Chimère{% endblock %}</title> <script type="text/javascript"><!-- - var media_path = '{{media_path}}'; + var media_path = '{{STATIC_URL}}'; var extra_url = "{{extra_url}}"; // --></script> {% block extra_head %}{{extra_head|safe}}{% endblock %} - <link rel="stylesheet" href="{{media_path}}styles.css" /> - {%if css_area%}<link rel="stylesheet" href="{{media_path}}{{css_area}}" />{%endif%} + <link rel="stylesheet" href="{{STATIC_URL}}styles.css" /> + {%if css_area%}<link rel="stylesheet" href="{{STATIC_URL}}{{css_area}}" />{%endif%} <script type="text/javascript" src="{{JQUERY_URL}}"></script> {% block head %}{% endblock %} </head> diff --git a/chimere/views.py b/chimere/views.py index 90fa821..17e510c 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2008-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2008-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as @@ -29,7 +29,7 @@ from django.core import serializers from django.db.models import Q from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import render_to_response -from django.template import loader +from django.template import loader, RequestContext from django.utils import simplejson from django.utils.http import urlquote from django.utils.translation import ugettext as _ @@ -47,7 +47,7 @@ def get_base_response(area_name=""): """ Get the base url """ - base_response_dct = {'media_path':settings.MEDIA_URL,} + base_response_dct = {'media_path':settings.STATIC_URL,} base_url = settings.EXTRA_URL if not base_url.startswith('/'): base_url = '/' + base_url @@ -70,8 +70,8 @@ def index(request, area_name=None, default_area=None, simple=False): tab = " "*4 for url in URL_OSM_CSS: extra += tab + '<link rel="stylesheet" href="%s" />' % url - for url in URL_OSM_JS + ["%sbase.js" % settings.MEDIA_URL, - "%smain_map.js" % settings.MEDIA_URL,]: + for url in URL_OSM_JS + ["%sbase.js" % settings.STATIC_URL, + "%smain_map.js" % settings.STATIC_URL,]: extra += tab + '<script src="%s"></script>\n' % url # show the welcome page today = datetime.date.today().strftime('%y-%m-%d') @@ -108,7 +108,8 @@ def index(request, area_name=None, default_area=None, simple=False): tpl = 'main_map.html' if simple: tpl = 'main_map_simple.html' - return render_to_response(tpl, response_dct) + return render_to_response(tpl, response_dct, + context_instance=RequestContext(request)) def edit(request, area_name=""): """ @@ -149,7 +150,8 @@ def edit(request, area_name=""): # manualy populate the custom widget if 'subcategory' in form.data and form.data['subcategory']: response_dct['current_category'] = int(form.data['subcategory']) - return render_to_response('edit.html', response_dct) + return render_to_response('edit.html', response_dct, + context_instance=RequestContext(request)) def uploadFile(request, category_id='', area_name=''): response_dct = get_base_response(area_name) @@ -192,7 +194,8 @@ def uploadFile(request, category_id='', area_name=''): # An unbound form form = Form() response_dct.update({'form':form}) - return render_to_response('upload_file.html', response_dct) + return render_to_response('upload_file.html', response_dct, + context_instance=RequestContext(request)) def processRouteFile(request, area_name='', file_id=None): if file_id: @@ -250,7 +253,8 @@ def editRoute(request, area_name=""): # manualy populate the custom widget if 'subcategory' in form.data and form.data['subcategory']: response_dct['current_category'] = int(form.data['subcategory']) - return render_to_response('edit_route.html', response_dct) + return render_to_response('edit_route.html', response_dct, + context_instance=RequestContext(request)) def welcome(request, display=None): """ @@ -271,7 +275,8 @@ def submited(request, area_name="", action=""): """ response_dct = get_base_response(area_name) response_dct.update({'actions':actions, 'action_selected':action,}) - return render_to_response('submited.html', response_dct) + return render_to_response('submited.html', response_dct, + context_instance=RequestContext(request)) def charte(request, area_name=""): """ @@ -279,7 +284,8 @@ def charte(request, area_name=""): """ response_dct = get_base_response(area_name) response_dct.update({'actions':actions, 'action_selected':('charte',)}) - return render_to_response('charte.html', response_dct) + return render_to_response('charte.html', response_dct, + context_instance=RequestContext(request)) def contactus(request, area_name=""): """ @@ -295,9 +301,9 @@ def contactus(request, area_name=""): response = notifyStaff(_(u"Comments/request on the map"), form.cleaned_data['content'], form.cleaned_data['email']) if response: - msg = _(u"Thank you for your contribution. It will be taken \ -into account. If you have left your email you may be contacted soon for more \ -details.") + msg = _(u"Thank you for your contribution. It will be taken "\ + u"into account. If you have left your email you may "\ + u"be contacted soon for more details.") else: msg = _(u"Temporary error. Renew your message later.") else: @@ -305,7 +311,8 @@ details.") response_dct = get_base_response(area_name) response_dct.update({'actions':actions, 'action_selected':('contact',), 'contact_form':form, 'message':msg}) - return render_to_response('contactus.html', response_dct) + return render_to_response('contactus.html', response_dct, + context_instance=RequestContext(request)) def getDetail(request, area_name, marker_id): ''' @@ -329,7 +336,8 @@ def getDetail(request, area_name, marker_id): share_networks.append((network[0], network[1] % net_dct, network[2])) response_dct['share_networks'] = share_networks response_dct['dated'] = settings.DAYS_BEFORE_EVENT and marker.start_date - return render_to_response('detail.html', response_dct) + return render_to_response('detail.html', response_dct, + context_instance=RequestContext(request)) def getDescriptionDetail(request, area_name, category_id): ''' @@ -341,7 +349,8 @@ def getDescriptionDetail(request, area_name, category_id): return HttpResponse('no results') response_dct = get_base_response(area_name) response_dct['category'] = category - return render_to_response('category_detail.html', response_dct) + return render_to_response('category_detail.html', response_dct, + context_instance=RequestContext(request)) def checkDate(q): """ @@ -432,7 +441,8 @@ def getAvailableCategories(request, area_name=None, area=None, status='A', subcategories = [(cat, list(subcats)) \ for cat, subcats in groupby(categories, get_cat)] response_dct['sub_categories'] = subcategories - return render_to_response('categories.html', response_dct) + return render_to_response('categories.html', response_dct, + context_instance=RequestContext(request)) def getTinyfiedUrl(parameters, area_name=''): ''' diff --git a/chimere/widgets.py b/chimere/widgets.py index ec63ea3..c2a6d60 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -29,7 +29,7 @@ from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ URL_OSM_CSS = ["http://www.openlayers.org/api/theme/default/style.css"] -URL_OSM_JS = [settings.MEDIA_URL+"OpenLayers.js", +URL_OSM_JS = [settings.STATIC_URL+"OpenLayers.js", "http://www.openstreetmap.org/openlayers/OpenStreetMap.js"] def getMapJS(area_name=''): @@ -43,7 +43,7 @@ def getMapJS(area_name=''): js += u"var centerLonLat = new OpenLayers.LonLat(%f,\ %f).transform(epsg_display_projection, epsg_projection);\n" % \ settings.DEFAULT_CENTER - js += u"var media_path = '%s';\n" % settings.MEDIA_URL + js += u"var media_path = '%s';\n" % settings.STATIC_URL js += u"var map_layer = %s;\n" % settings.MAP_LAYER js += u"var restricted_extent;\n" @@ -65,7 +65,7 @@ class TextareaWidget(forms.Textarea): """ class Media: js = ["%stiny_mce.js" % settings.TINYMCE_URL, - "%stextareas.js" % settings.MEDIA_URL,] + "%stextareas.js" % settings.STATIC_URL,] class PointChooserWidget(forms.TextInput): """ @@ -73,10 +73,10 @@ class PointChooserWidget(forms.TextInput): """ class Media: css = { - "all": URL_OSM_CSS + ["%sforms.css" % settings.MEDIA_URL,] + "all": URL_OSM_CSS + ["%sforms.css" % settings.STATIC_URL,] } - js = URL_OSM_JS + ["%sedit_map.js" % settings.MEDIA_URL, - "%sbase.js" % settings.MEDIA_URL,] + js = URL_OSM_JS + ["%sedit_map.js" % settings.STATIC_URL, + "%sbase.js" % settings.STATIC_URL,] def render(self, name, value, attrs=None, area_name=''): ''' @@ -97,7 +97,7 @@ class PointChooserWidget(forms.TextInput): else: value = None tpl = getMapJS(area_name) - tpl += u'<script src="%sedit_map.js"></script>\n' % settings.MEDIA_URL + tpl += u'<script src="%sedit_map.js"></script>\n' % settings.STATIC_URL tpl += u"""<div id='map_edit'></div> <div id='live_lonlat'> <p><label for='live_latitude'>%s</label>\ @@ -141,10 +141,10 @@ class RouteChooserWidget(forms.TextInput): """ class Media: css = { - "all": URL_OSM_CSS + ["%sforms.css" % settings.MEDIA_URL,] + "all": URL_OSM_CSS + ["%sforms.css" % settings.STATIC_URL,] } - js = ["%sedit_route_map.js" % settings.MEDIA_URL, - "%sbase.js" % settings.MEDIA_URL,] + URL_OSM_JS + js = ["%sedit_route_map.js" % settings.STATIC_URL, + "%sbase.js" % settings.STATIC_URL,] + URL_OSM_JS def render(self, name, value, attrs=None, area_name='', routefile_id=None): ''' @@ -176,7 +176,7 @@ _(u"To delete a point move the mouse cursor over it and press the \"d\" or \ _(u"To add a point click in the middle of a segment and drag the new point to \ the desired position")) tpl += u'<script src="%sedit_route_map.js"></script>\n' % \ - settings.MEDIA_URL + settings.STATIC_URL if not value: # upload a file tpl += u"""<script type='text/javascript'><!-- @@ -249,10 +249,10 @@ class AreaWidget(forms.TextInput): """ class Media: css = { - "all": URL_OSM_CSS + ["%sforms.css" % settings.MEDIA_URL,] + "all": URL_OSM_CSS + ["%sforms.css" % settings.STATIC_URL,] } - js = URL_OSM_JS + ["%sedit_area.js" % settings.MEDIA_URL, - "%sbase.js" % settings.MEDIA_URL,] + js = URL_OSM_JS + ["%sedit_area.js" % settings.STATIC_URL, + "%sbase.js" % settings.STATIC_URL,] def render(self, name, value, attrs=None): """ @@ -318,13 +318,13 @@ class AreaField(forms.MultiValueField): class MultiSelectWidget(forms.SelectMultiple): class Media: css = {'all': ( - settings.MEDIA_URL + 'jquery/bsmSelect/css/jquery.bsmselect.css', - settings.MEDIA_URL + 'jquery/css/jquery.bsmselect.custom.css', + settings.STATIC_URL + 'jquery/bsmSelect/css/jquery.bsmselect.css', + settings.STATIC_URL + 'jquery/css/jquery.bsmselect.custom.css', ) } js = ( - settings.MEDIA_URL + 'jquery/bsmSelect/js/jquery.bsmselect.js', - settings.MEDIA_URL + 'jquery/bsmSelect/js/jquery.bsmselect.compatibility.js', + settings.STATIC_URL + 'jquery/bsmSelect/js/jquery.bsmselect.js', + settings.STATIC_URL + 'jquery/bsmSelect/js/jquery.bsmselect.compatibility.js', ) def render(self, name, value, attrs=None): diff --git a/docs/upgrade.rst b/docs/upgrade.rst index 10548d7..18c8026 100644 --- a/docs/upgrade.rst +++ b/docs/upgrade.rst @@ -84,8 +84,16 @@ Adapt settings.py The format of settings.py could have evolved, the easiest way to complete your settings.py is to compare your old settings.py.example and the new one provided. +Upgrade to version 2.0 +********************** + + - Add to the settings.py a STATIC_URL variable by default set to '/static/' (be +careful to change MEDIA_URL if it is already set to '/static/'). + + - Add the detail of TEMPLATE_CONTEXT_PROCESSORS (see settings.py.example) + Specific upgrade from version 1.0 to version 1.1 -*************************************************** +************************************************ Version 1.1 of Chimère uses Django 1.2 and with it the way to define database has changed. diff --git a/example_project/settings.py.example b/example_project/settings.py.example index 2715d02..c9a3934 100644 --- a/example_project/settings.py.example +++ b/example_project/settings.py.example @@ -10,6 +10,7 @@ ROOT_PATH = os.path.realpath(os.path.dirname(__file__)) + "/" EXTRA_URL = 'chimere/' BASE_URL = SERVER_URL + EXTRA_URL EMAIL_HOST = 'localhost' +STATIC_URL = '/static/' TINYMCE_URL = 'http://localhost/tinymce/' JQUERY_URL = "/chimere/static/jquery/jquery-1.4.4.min.js" @@ -147,6 +148,7 @@ INSTALLED_APPS = ( 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', + 'django.contrib.staticfiles', 'south', 'chimere', # activate it if you want to use migration scripts @@ -157,3 +159,51 @@ INSTALLED_APPS = ( if 'chimere_rss' in INSTALLED_APPS: TEMPLATE_DIRS.append(ROOT_PATH + 'chimere_rss/templates') + +LOGGING = {'version': 1, + 'disable_existing_loggers': False, + 'handlers': { + /# Include the default Django email handler for errors + # This is what you'd get without configuring logging at all. + 'mail_admins': { + 'class': 'django.utils.log.AdminEmailHandler', + 'level': 'ERROR', + # But the emails are plain text by default - HTML is nicer + 'include_html': True, + }, + # Log to a text file that can be rotated by logrotate + 'logfile': { + 'class': 'logging.handlers.WatchedFileHandler', + 'filename': '/var/log/django/chimere.log' + }, + }, + 'loggers': { + # Again, default Django configuration to email unhandled exceptions + 'django.request': { + 'handlers': ['mail_admins'], + 'level': 'ERROR', + 'propagate': True, + }, + # Might as well log any errors anywhere else in Django + 'django': { + 'handlers': ['logfile'], + 'level': 'ERROR', + 'propagate': False, + }, + # Your own app - this assumes all your logger names start with "myapp." + 'main': { + 'handlers': ['logfile'], + 'level': 'WARNING', # Or maybe INFO or DEBUG + 'propogate': False + }, + }, +} + +TEMPLATE_CONTEXT_PROCESSORS = ( + 'django.core.context_processors.debug', + 'django.core.context_processors.i18n', + 'django.core.context_processors.media', + 'django.core.context_processors.static', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', +) diff --git a/example_project/urls.py b/example_project/urls.py index 84a7e13..1f95694 100644 --- a/example_project/urls.py +++ b/example_project/urls.py @@ -33,7 +33,7 @@ urlpatterns += staticfiles_urlpatterns() urlpatterns += patterns('', (r'^admin/doc/', include('django.contrib.admindocs.urls')), (r'^admin/', include(admin.site.urls)), - url(r'^chimere/', include('chimere.urls', namespace="chimere")), + url(r'^', include('chimere.urls', namespace="chimere")), ) if 'rss' in settings.INSTALLED_APPS: |