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:  | 
