Browse Source

Refactored API calls to use new api. #147

Ralfp 12 years ago
parent
commit
04b01bb090
49 changed files with 511 additions and 488 deletions
  1. 7 7
      misago/apps/activation/views.py
  2. 10 7
      misago/apps/admin/forums/views.py
  3. 0 15
      misago/apps/admin/home.py
  4. 11 8
      misago/apps/admin/index.py
  5. 10 7
      misago/apps/admin/newsletters/views.py
  6. 16 15
      misago/apps/admin/pruneusers/views.py
  7. 20 19
      misago/apps/admin/settings/views.py
  8. 19 14
      misago/apps/admin/stats/views.py
  9. 35 34
      misago/apps/admin/widgets.py
  10. 7 6
      misago/apps/alerts.py
  11. 7 6
      misago/apps/category.py
  12. 16 16
      misago/apps/errors.py
  13. 4 5
      misago/apps/forummap.py
  14. 7 6
      misago/apps/newsfeed.py
  15. 8 7
      misago/apps/newthreads.py
  16. 8 7
      misago/apps/popularthreads.py
  17. 5 5
      misago/apps/profiles/details/views.py
  18. 9 9
      misago/apps/profiles/followers/views.py
  19. 9 9
      misago/apps/profiles/follows/views.py
  20. 9 8
      misago/apps/profiles/posts/views.py
  21. 9 8
      misago/apps/profiles/threads/views.py
  22. 14 13
      misago/apps/profiles/views.py
  23. 8 7
      misago/apps/register/views.py
  24. 7 6
      misago/apps/resetpswd/views.py
  25. 4 3
      misago/apps/search/views.py
  26. 11 10
      misago/apps/signin/views.py
  27. 26 25
      misago/apps/threadtype/changelog.py
  28. 21 20
      misago/apps/threadtype/details.py
  29. 22 21
      misago/apps/threadtype/list/moderation.py
  30. 13 12
      misago/apps/threadtype/list/views.py
  31. 16 15
      misago/apps/threadtype/posting/base.py
  32. 23 22
      misago/apps/threadtype/thread/moderation/posts.py
  33. 11 10
      misago/apps/threadtype/thread/moderation/thread.py
  34. 20 19
      misago/apps/threadtype/thread/views.py
  35. 3 2
      misago/apps/tos.py
  36. 25 29
      misago/apps/usercp/avatar/views.py
  37. 6 6
      misago/apps/usercp/credentials/views.py
  38. 6 6
      misago/apps/usercp/options/views.py
  39. 9 10
      misago/apps/usercp/signature/views.py
  40. 9 9
      misago/apps/usercp/username/views.py
  41. 10 9
      misago/apps/watchedthreads/views.py
  42. 2 1
      misago/firewalls.py
  43. 2 2
      misago/middleware/firewalls.py
  44. 1 1
      misago/middleware/theme.py
  45. 8 3
      misago/models/usermodel.py
  46. 3 0
      misago/settings_base.py
  47. 1 0
      misago/shortcuts.py
  48. 4 0
      misago/template/theme.py
  49. 0 9
      misago/utils/views.py

+ 7 - 7
misago/apps/activation/views.py

@@ -6,7 +6,7 @@ from misago.decorators import block_authenticated, block_banned, block_crawlers,
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Ban, User
 from misago.models import Ban, User
-from misago.utils.views import redirect_message
+from misago.shortcuts import redirect_message, render_to_response
 from misago.apps.activation.forms import UserSendActivationMailForm
 from misago.apps.activation.forms import UserSendActivationMailForm
 
 
 @block_crawlers
 @block_crawlers
@@ -40,12 +40,12 @@ def form(request):
             message = Message(form.non_field_errors()[0], 'error')
             message = Message(form.non_field_errors()[0], 'error')
     else:
     else:
         form = UserSendActivationMailForm(request=request)
         form = UserSendActivationMailForm(request=request)
-    return request.theme.render_to_response('resend_activation.html',
-                                            {
-                                             'message': message,
-                                             'form': FormLayout(form),
-                                            },
-                                            context_instance=RequestContext(request));
+    return render_to_response('resend_activation.html',
+                              {
+                               'message': message,
+                               'form': FormLayout(form),
+                              },
+                              context_instance=RequestContext(request));
 
 
 
 
 @block_banned
 @block_banned

+ 10 - 7
misago/apps/admin/forums/views.py

@@ -9,6 +9,7 @@ from mptt.forms import TreeNodeChoiceField
 from misago.admin import site
 from misago.admin import site
 from misago.apps.admin.widgets import *
 from misago.apps.admin.widgets import *
 from misago.models import Forum
 from misago.models import Forum
+from misago.shortcuts import render_to_response
 from misago.utils.strings import slugify
 from misago.utils.strings import slugify
 from misago.apps.admin.forums.forms import NewNodeForm, CategoryForm, ForumForm, RedirectForm, DeleteForm
 from misago.apps.admin.forums.forms import NewNodeForm, CategoryForm, ForumForm, RedirectForm, DeleteForm
 
 
@@ -108,13 +109,15 @@ def resync_forums(request, forum=0, progress=0):
         return redirect(django_reverse('admin_forums_resync'))
         return redirect(django_reverse('admin_forums_resync'))
 
 
     # Render Progress
     # Render Progress
-    response = request.theme.render_to_response('processing.html', {
-            'task_name': _('Resynchronizing Forums'),
-            'target_name': forum.name,
-            'message': _('Resynchronized %(progress)s from %(total)s threads') % {'progress': progress, 'total': threads_total},
-            'progress': progress * 100 / threads_total,
-            'cancel_url': reverse('admin_forums'),
-        }, context_instance=RequestContext(request));
+    response = render_to_response('processing.html',
+                                  {
+                                   'task_name': _('Resynchronizing Forums'),
+                                   'target_name': forum.name,
+                                   'message': _('Resynchronized %(progress)s from %(total)s threads') % {'progress': progress, 'total': threads_total},
+                                   'progress': progress * 100 / threads_total,
+                                   'cancel_url': reverse('admin_forums'),
+                                   },
+                                  context_instance=RequestContext(request));
 
 
     # Redirect where to?
     # Redirect where to?
     if progress >= threads_total:
     if progress >= threads_total:

+ 0 - 15
misago/apps/admin/home.py

@@ -1,15 +0,0 @@
-from django.template import RequestContext
-from misago.models import Session
-
-def home(request):
-    return request.theme.render_to_response('home.html', {
-        'users': request.monitor['users'],
-        'users_inactive': request.monitor['users_inactive'],
-        'threads': request.monitor['threads'],
-        'posts': request.monitor['posts'],
-        'admins': Session.objects.filter(user__isnull=False).filter(admin=1).order_by('user__username_slug').select_related('user'),
-        }, context_instance=RequestContext(request));
-
-
-def todo(request):
-    return request.theme.render_to_response('todo.html', context_instance=RequestContext(request));

+ 11 - 8
misago/apps/admin/index.py

@@ -1,15 +1,18 @@
 from django.template import RequestContext
 from django.template import RequestContext
 from misago.models import Session
 from misago.models import Session
+from misago.shortcuts import render_to_response
 
 
 def index(request):
 def index(request):
-    return request.theme.render_to_response('index.html', {
-        'users': request.monitor['users'],
-        'users_inactive': request.monitor['users_inactive'],
-        'threads': request.monitor['threads'],
-        'posts': request.monitor['posts'],
-        'admins': Session.objects.filter(user__isnull=False).filter(admin=1).order_by('user__username_slug').select_related('user'),
-        }, context_instance=RequestContext(request));
+    return render_to_response('index.html',
+                              {
+                               'users': request.monitor['users'],
+                               'users_inactive': request.monitor['users_inactive'],
+                               'threads': request.monitor['threads'],
+                               'posts': request.monitor['posts'],
+                               'admins': Session.objects.filter(user__isnull=False).filter(admin=1).order_by('user__username_slug').select_related('user'),
+                              },
+                              context_instance=RequestContext(request));
 
 
 
 
 def todo(request, *args, **kwargs):
 def todo(request, *args, **kwargs):
-    return request.theme.render_to_response('todo.html', context_instance=RequestContext(request));
+    return render_to_response('todo.html', context_instance=RequestContext(request));

+ 10 - 7
misago/apps/admin/newsletters/views.py

@@ -7,6 +7,7 @@ from django.utils.translation import ugettext as _
 from misago.admin import site
 from misago.admin import site
 from misago.apps.admin.widgets import *
 from misago.apps.admin.widgets import *
 from misago.models import Newsletter, User
 from misago.models import Newsletter, User
+from misago.shortcuts import render_to_response
 from misago.apps.admin.newsletters.forms import NewsletterForm, SearchNewslettersForm
 from misago.apps.admin.newsletters.forms import NewsletterForm, SearchNewslettersForm
 
 
 def reverse(route, target=None):
 def reverse(route, target=None):
@@ -185,13 +186,15 @@ def send(request, target, token):
             return redirect(reverse('admin_newsletters'))
             return redirect(reverse('admin_newsletters'))
 
 
         # Render Progress
         # Render Progress
-        response = request.theme.render_to_response('processing.html', {
-                'task_name': _('Sending Newsletter'),
-                'target_name': newsletter.name,
-                'message': _('Sent to %(progress)s from %(total)s users') % {'progress': newsletter.progress, 'total': recipients_total},
-                'progress': newsletter.progress * 100 / recipients_total,
-                'cancel_url': reverse('admin_newsletters'),
-            }, context_instance=RequestContext(request));
+        response = render_to_response('processing.html',
+                                      {
+                                      'task_name': _('Sending Newsletter'),
+                                      'target_name': newsletter.name,
+                                      'message': _('Sent to %(progress)s from %(total)s users') % {'progress': newsletter.progress, 'total': recipients_total},
+                                      'progress': newsletter.progress * 100 / recipients_total,
+                                      'cancel_url': reverse('admin_newsletters'),
+                                      },
+                                      context_instance=RequestContext(request));
         response['refresh'] = '2;url=%s' % reverse('admin_newsletters_send', newsletter)
         response['refresh'] = '2;url=%s' % reverse('admin_newsletters_send', newsletter)
         return response
         return response
     except Newsletter.DoesNotExist:
     except Newsletter.DoesNotExist:

+ 16 - 15
misago/apps/admin/pruneusers/views.py

@@ -5,6 +5,7 @@ from misago.admin import site
 from misago.apps.admin.widgets import *
 from misago.apps.admin.widgets import *
 from misago.forms import Form
 from misago.forms import Form
 from misago.models import PruningPolicy, User
 from misago.models import PruningPolicy, User
+from misago.shortcuts import render_to_response
 from misago.apps.admin.pruneusers.forms import PolicyForm
 from misago.apps.admin.pruneusers.forms import PolicyForm
 
 
 def reverse(route, target=None):
 def reverse(route, target=None):
@@ -195,18 +196,18 @@ class Apply(FormWidget):
             else:
             else:
                 message = Message(_("Request authorization is invalid. Please resubmit your form."), 'error')
                 message = Message(_("Request authorization is invalid. Please resubmit your form."), 'error')
 
 
-        return request.theme.render_to_response(self.get_template(),
-                                                {
-                                                 'admin': self.admin,
-                                                 'action': self,
-                                                 'request': request,
-                                                 'url': self.get_url(model),
-                                                 'fallback': self.get_fallback_url(),
-                                                 'messages': request.messages.get_messages(self.admin.id),
-                                                 'message': message,
-                                                 'tabbed': self.tabbed,
-                                                 'total_users': total_users,
-                                                 'target': self.get_target_name(original_model),
-                                                 'target_model': original_model,
-                                                },
-                                                context_instance=RequestContext(request));
+        return render_to_response(self.get_template(),
+                                  {
+                                  'admin': self.admin,
+                                  'action': self,
+                                  'request': request,
+                                  'url': self.get_url(model),
+                                  'fallback': self.get_fallback_url(),
+                                  'messages': request.messages.get_messages(self.admin.id),
+                                  'message': message,
+                                  'tabbed': self.tabbed,
+                                  'total_users': total_users,
+                                  'target': self.get_target_name(original_model),
+                                  'target_model': original_model,
+                                  },
+                                  context_instance=RequestContext(request));

+ 20 - 19
misago/apps/admin/settings/views.py

@@ -7,6 +7,7 @@ from misago.forms import Form, FormLayout, FormFields
 from misago.messages import Message
 from misago.messages import Message
 from misago.search import SearchQuery, SearchException
 from misago.search import SearchQuery, SearchException
 from misago.models import SettingsGroup, Setting
 from misago.models import SettingsGroup, Setting
+from misago.shortcuts import render_to_response
 from misago.apps.errors import error404
 from misago.apps.errors import error404
 from misago.apps.admin.settings.forms import SearchForm
 from misago.apps.admin.settings.forms import SearchForm
 
 
@@ -59,16 +60,16 @@ def settings(request, group_id=None, group_slug=None):
         form = SettingsGroupForm(request=request)
         form = SettingsGroupForm(request=request)
 
 
     # Display settings group form      
     # Display settings group form      
-    return request.theme.render_to_response('settings/settings.html',
-                                            {
-                                            'message': message,
-                                            'groups': settings_groups,
-                                            'active_group': active_group,
-                                            'search_form': FormFields(SearchForm(request=request)),
-                                            'form': FormLayout(form),
-                                            'raw_form': form,
-                                            },
-                                            context_instance=RequestContext(request));
+    return render_to_response('settings/settings.html',
+                              {
+                              'message': message,
+                              'groups': settings_groups,
+                              'active_group': active_group,
+                              'search_form': FormFields(SearchForm(request=request)),
+                              'form': FormLayout(form),
+                              'raw_form': form,
+                              },
+                              context_instance=RequestContext(request));
 
 
 
 
 def settings_search(request):
 def settings_search(request):
@@ -105,12 +106,12 @@ def settings_search(request):
             raise SearchException(_('Search query is invalid.'))
             raise SearchException(_('Search query is invalid.'))
     except SearchException as e:
     except SearchException as e:
         message = Message(unicode(e), 'error')
         message = Message(unicode(e), 'error')
-    return request.theme.render_to_response('settings/search_results.html',
-                                    {
-                                    'message': message,
-                                    'groups': settings_groups,
-                                    'active_group': None,
-                                    'found_settings': found_settings,
-                                    'search_form': FormFields(form),
-                                    },
-                                    context_instance=RequestContext(request));
+    return render_to_response('settings/search_results.html',
+                              {
+                              'message': message,
+                              'groups': settings_groups,
+                              'active_group': None,
+                              'found_settings': found_settings,
+                              'search_form': FormFields(form),
+                              },
+                              context_instance=RequestContext(request));

+ 19 - 14
misago/apps/admin/stats/views.py

@@ -8,6 +8,7 @@ from django.utils import timezone
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
+from misago.shortcuts import render_to_response
 from misago.apps.admin.stats.forms import GenerateStatisticsForm
 from misago.apps.admin.stats.forms import GenerateStatisticsForm
 from misago.apps.errors import error404
 from misago.apps.errors import error404
 
 
@@ -30,8 +31,8 @@ def form(request):
         Something went FUBAR - Misago ships with some stats providers out of box
         Something went FUBAR - Misago ships with some stats providers out of box
         If those providers cant be found, this means Misago filesystem is corrupted
         If those providers cant be found, this means Misago filesystem is corrupted
         """
         """
-        return request.theme.render_to_response('stats/not_available.html',
-                                                context_instance=RequestContext(request));
+        return render_to_response('stats/not_available.html',
+                                  context_instance=RequestContext(request));
 
 
     message = None
     message = None
     if request.method == 'POST':
     if request.method == 'POST':
@@ -62,10 +63,12 @@ def form(request):
     else:
     else:
         form = GenerateStatisticsForm(provider_choices=statistics_providers, request=request)
         form = GenerateStatisticsForm(provider_choices=statistics_providers, request=request)
 
 
-    return request.theme.render_to_response('stats/form.html', {
-                                            'form': FormLayout(form),
-                                            'message': message,
-                                            }, context_instance=RequestContext(request));
+    return render_to_response('stats/form.html',
+                              {
+                              'form': FormLayout(form),
+                              'message': message,
+                              },
+                              context_instance=RequestContext(request));
 
 
 
 
 def graph(request, model, date_start, date_end, precision):
 def graph(request, model, date_start, date_end, precision):
@@ -93,8 +96,8 @@ def graph(request, model, date_start, date_end, precision):
 
 
     if not statistics_providers:
     if not statistics_providers:
         # Like before, q.q on lack of models
         # Like before, q.q on lack of models
-        return request.theme.render_to_response('stats/not_available.html',
-                                                context_instance=RequestContext(request));
+        return render_to_response('stats/not_available.html',
+                                  context_instance=RequestContext(request));
 
 
     if not model in models_map or check_dates(date_start, date_end, precision):
     if not model in models_map or check_dates(date_start, date_end, precision):
         # Bad model name or graph data!
         # Bad model name or graph data!
@@ -104,12 +107,14 @@ def graph(request, model, date_start, date_end, precision):
                                   provider_choices=statistics_providers,
                                   provider_choices=statistics_providers,
                                   request=request,
                                   request=request,
                                   initial={'provider_model': model, 'date_start': date_start, 'date_end': date_end, 'stats_precision': precision})
                                   initial={'provider_model': model, 'date_start': date_start, 'date_end': date_end, 'stats_precision': precision})
-    return request.theme.render_to_response('stats/graph.html', {
-                                            'title': models_map[model].statistics_name,
-                                            'graph': build_graph(models_map[model], date_start, date_end, precision),
-                                            'form': FormLayout(form),
-                                            'message': request.messages.get_message('admin_stats'),
-                                            }, context_instance=RequestContext(request));
+    return render_to_response('stats/graph.html',
+                              {
+                              'title': models_map[model].statistics_name,
+                              'graph': build_graph(models_map[model], date_start, date_end, precision),
+                              'form': FormLayout(form),
+                              'message': request.messages.get_message('admin_stats'),
+                              },
+                              context_instance=RequestContext(request));
 
 
 
 
 def check_dates(date_start, date_end, precision):
 def check_dates(date_start, date_end, precision):

+ 35 - 34
misago/apps/admin/widgets.py

@@ -9,6 +9,7 @@ from jinja2 import TemplateNotFound
 import math
 import math
 from misago.forms import Form, FormLayout, FormFields, FormFieldsets
 from misago.forms import Form, FormLayout, FormFields, FormFieldsets
 from misago.messages import Message
 from misago.messages import Message
+from misago.shortcuts import render_to_response
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 
 
 """
 """
@@ -352,25 +353,25 @@ class ListWidget(BaseWidget):
             items_total = items_shown
             items_total = items_shown
 
 
         # Render list
         # Render list
-        return request.theme.render_to_response(self.get_template(),
-                                                self.add_template_variables({
-                                                 'admin': self.admin,
-                                                 'action': self,
-                                                 'request': request,
-                                                 'url': self.get_url(),
-                                                 'messages_log': request.messages.get_messages(self.admin.id),
-                                                 'message': message,
-                                                 'sorting': self.sortables,
-                                                 'sorting_method': sorting_method,
-                                                 'pagination': paginating_method,
-                                                 'list_form': FormLayout(list_form) if list_form else None,
-                                                 'search_form': FormLayout(search_form) if search_form else None,
-                                                 'table_form': FormFields(table_form).fields if table_form else None,
-                                                 'items': items,
-                                                 'items_total': items_total,
-                                                 'items_shown': items_shown,
-                                                }),
-                                                context_instance=RequestContext(request));
+        return render_to_response(self.get_template(),
+                                  self.add_template_variables({
+                                   'admin': self.admin,
+                                   'action': self,
+                                   'request': request,
+                                   'url': self.get_url(),
+                                   'messages_log': request.messages.get_messages(self.admin.id),
+                                   'message': message,
+                                   'sorting': self.sortables,
+                                   'sorting_method': sorting_method,
+                                   'pagination': paginating_method,
+                                   'list_form': FormLayout(list_form) if list_form else None,
+                                   'search_form': FormLayout(search_form) if search_form else None,
+                                   'table_form': FormFields(table_form).fields if table_form else None,
+                                   'items': items,
+                                   'items_total': items_total,
+                                   'items_shown': items_shown,
+                                  }),
+                                  context_instance=RequestContext(request));
 
 
 
 
 class FormWidget(BaseWidget):
 class FormWidget(BaseWidget):
@@ -461,21 +462,21 @@ class FormWidget(BaseWidget):
             form = self.get_form_instance(FormType, model, self.get_initial_data(model))
             form = self.get_form_instance(FormType, model, self.get_initial_data(model))
 
 
         # Render form
         # Render form
-        return request.theme.render_to_response(self.get_template(),
-                                                self.add_template_variables({
-                                                 'admin': self.admin,
-                                                 'action': self,
-                                                 'request': request,
-                                                 'url': self.get_url(model),
-                                                 'fallback': self.get_fallback_url(),
-                                                 'messages_log': request.messages.get_messages(self.admin.id),
-                                                 'message': message,
-                                                 'tabbed': self.tabbed,
-                                                 'target': self.get_target_name(original_model),
-                                                 'target_model': original_model,
-                                                 'form': FormLayout(form, self.get_layout(form, target)),
-                                                }),
-                                                context_instance=RequestContext(request));
+        return render_to_response(self.get_template(),
+                                  self.add_template_variables({
+                                   'admin': self.admin,
+                                   'action': self,
+                                   'request': request,
+                                   'url': self.get_url(model),
+                                   'fallback': self.get_fallback_url(),
+                                   'messages_log': request.messages.get_messages(self.admin.id),
+                                   'message': message,
+                                   'tabbed': self.tabbed,
+                                   'target': self.get_target_name(original_model),
+                                   'target_model': original_model,
+                                   'form': FormLayout(form, self.get_layout(form, target)),
+                                  }),
+                                  context_instance=RequestContext(request));
 
 
 
 
 class ButtonWidget(BaseWidget):
 class ButtonWidget(BaseWidget):

+ 7 - 6
misago/apps/alerts.py

@@ -5,6 +5,7 @@ from django.utils import timezone
 from django.utils.timezone import localtime
 from django.utils.timezone import localtime
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
 from misago.decorators import block_guest
 from misago.decorators import block_guest
+from misago.shortcuts import render_to_response
 
 
 @block_guest
 @block_guest
 def alerts(request):
 def alerts(request):
@@ -48,9 +49,9 @@ def alerts(request):
     request.user.alerts = 0
     request.user.alerts = 0
     request.user.alerts_date = now
     request.user.alerts_date = now
     request.user.save(force_update=True)
     request.user.save(force_update=True)
-    return request.theme.render_to_response('alerts.html',
-                                            {
-                                             'new_alerts': new_alerts,
-                                             'alerts': alerts,
-                                             },
-                                            context_instance=RequestContext(request))
+    return render_to_response('alerts.html',
+                              {
+                              'new_alerts': new_alerts,
+                              'alerts': alerts,
+                              },
+                              context_instance=RequestContext(request))

+ 7 - 6
misago/apps/category.py

@@ -2,6 +2,7 @@ from django.template import RequestContext
 from misago.apps.errors import error403, error404
 from misago.apps.errors import error403, error404
 from misago.models import Forum
 from misago.models import Forum
 from misago.readstrackers import ForumsTracker
 from misago.readstrackers import ForumsTracker
+from misago.shortcuts import render_to_response
 
 
 def category(request, forum, slug):
 def category(request, forum, slug):
     if not request.acl.forums.can_see(forum):
     if not request.acl.forums.can_see(forum):
@@ -14,9 +15,9 @@ def category(request, forum, slug):
         return error404(request)
         return error404(request)
 
 
     forum.subforums = Forum.objects.treelist(request.acl.forums, forum, tracker=ForumsTracker(request.user))
     forum.subforums = Forum.objects.treelist(request.acl.forums, forum, tracker=ForumsTracker(request.user))
-    return request.theme.render_to_response('category.html',
-                                            {
-                                             'category': forum,
-                                             'parents': Forum.objects.forum_parents(forum.pk),
-                                             },
-                                            context_instance=RequestContext(request));
+    return render_to_response('category.html',
+                              {
+                              'category': forum,
+                              'parents': Forum.objects.forum_parents(forum.pk),
+                              },
+                              context_instance=RequestContext(request));

+ 16 - 16
misago/apps/errors.py

@@ -1,6 +1,6 @@
 from django.template import RequestContext
 from django.template import RequestContext
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
-from misago.utils.views import json_response
+from misago.shortcuts import render_to_response, json_response
 
 
 def error_not_implemented(request, *args, **kwargs):
 def error_not_implemented(request, *args, **kwargs):
     """Generic "NOT IMPLEMENTED!" Error"""
     """Generic "NOT IMPLEMENTED!" Error"""
@@ -17,13 +17,13 @@ def error_view(request, error, message=None):
             if error == 403:
             if error == 403:
                 message = _("You don't have permission to see requested page.")
                 message = _("You don't have permission to see requested page.")
         return json_response(request, status=error, message=message)
         return json_response(request, status=error, message=message)
-    response = request.theme.render_to_response(('error%s.html' % error),
-                                                {
-                                                 'message': message,
-                                                 'hide_signin': True,
-                                                 'exception_response': True,
-                                                 },
-                                                context_instance=RequestContext(request));
+    response = render_to_response(('error%s.html' % error),
+                                  {
+                                  'message': message,
+                                  'hide_signin': True,
+                                  'exception_response': True,
+                                  },
+                                  context_instance=RequestContext(request));
     response.status_code = error
     response.status_code = error
     return response
     return response
 
 
@@ -41,13 +41,13 @@ def error_banned(request, user=None, ban=None):
         ban = request.ban
         ban = request.ban
     if request.is_ajax():
     if request.is_ajax():
         return json_response(request, status=403, message=_("You are banned."))
         return json_response(request, status=403, message=_("You are banned."))
-    response = request.theme.render_to_response('error403_banned.html',
-                                                {
-                                                 'banned_user': user,
-                                                 'ban': ban,
-                                                 'hide_signin': True,
-                                                 'exception_response': True,
-                                                 },
-                                                context_instance=RequestContext(request));
+    response = render_to_response('error403_banned.html',
+                                  {
+                                  'banned_user': user,
+                                  'ban': ban,
+                                  'hide_signin': True,
+                                  'exception_response': True,
+                                  },
+                                  context_instance=RequestContext(request));
     response.status_code = 403
     response.status_code = 403
     return response
     return response

+ 4 - 5
misago/apps/forummap.py

@@ -1,9 +1,8 @@
 from django.template import RequestContext
 from django.template import RequestContext
 from misago.models import Forum
 from misago.models import Forum
+from misago.shortcuts import render_to_response
 
 
 def forum_map(request):
 def forum_map(request):
-    return request.theme.render_to_response('forum_map.html',
-                                            {
-                                             'forums': Forum.objects.treelist(request.acl.forums),
-                                             },
-                                            context_instance=RequestContext(request));
+    return render_to_response('forum_map.html',
+                              {'forums': Forum.objects.treelist(request.acl.forums),},
+                              context_instance=RequestContext(request));

+ 7 - 6
misago/apps/newsfeed.py

@@ -1,6 +1,7 @@
 from django.template import RequestContext
 from django.template import RequestContext
 from misago.decorators import block_guest
 from misago.decorators import block_guest
 from misago.models import Forum, Post
 from misago.models import Forum, Post
+from misago.shortcuts import render_to_response
 
 
 @block_guest
 @block_guest
 def newsfeed(request):
 def newsfeed(request):
@@ -14,9 +15,9 @@ def newsfeed(request):
         queryset = queryset.filter(user_id__in=follows)
         queryset = queryset.filter(user_id__in=follows)
         queryset = queryset.prefetch_related('thread', 'forum', 'user').order_by('-id')
         queryset = queryset.prefetch_related('thread', 'forum', 'user').order_by('-id')
         queryset = queryset[:18]
         queryset = queryset[:18]
-    return request.theme.render_to_response('newsfeed.html',
-                                            {
-                                             'follows': follows,
-                                             'posts': queryset,
-                                             },
-                                            context_instance=RequestContext(request))
+    return render_to_response('newsfeed.html',
+                              {
+                              'follows': follows,
+                              'posts': queryset,
+                              },
+                              context_instance=RequestContext(request))

+ 8 - 7
misago/apps/newthreads.py

@@ -5,6 +5,7 @@ from django.shortcuts import redirect
 from django.template import RequestContext
 from django.template import RequestContext
 from django.utils import timezone
 from django.utils import timezone
 from misago.models import Forum, Thread
 from misago.models import Forum, Thread
+from misago.shortcuts import render_to_response
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 
 
 def new_threads(request, page=0):
 def new_threads(request, page=0):
@@ -19,10 +20,10 @@ def new_threads(request, page=0):
     if request.settings['avatars_on_threads_list']:
     if request.settings['avatars_on_threads_list']:
         queryset = queryset.prefetch_related('start_poster', 'last_poster')
         queryset = queryset.prefetch_related('start_poster', 'last_poster')
 
 
-    return request.theme.render_to_response('new_threads.html',
-                                            {
-                                             'items_total': items_total,
-                                             'threads': Thread.objects.with_reads(queryset, request.user),
-                                             'pagination': pagination,
-                                             },
-                                            context_instance=RequestContext(request));
+    return render_to_response('new_threads.html',
+                              {
+                              'items_total': items_total,
+                              'threads': Thread.objects.with_reads(queryset, request.user),
+                              'pagination': pagination,
+                              },
+                              context_instance=RequestContext(request));

+ 8 - 7
misago/apps/popularthreads.py

@@ -5,6 +5,7 @@ from django.shortcuts import redirect
 from django.template import RequestContext
 from django.template import RequestContext
 from django.utils import timezone
 from django.utils import timezone
 from misago.models import Forum, Thread
 from misago.models import Forum, Thread
+from misago.shortcuts import render_to_response
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 
 
 def popular_threads(request, page=0):
 def popular_threads(request, page=0):
@@ -19,10 +20,10 @@ def popular_threads(request, page=0):
     if request.settings['avatars_on_threads_list']:
     if request.settings['avatars_on_threads_list']:
         queryset = queryset.prefetch_related('start_poster', 'last_poster')
         queryset = queryset.prefetch_related('start_poster', 'last_poster')
 
 
-    return request.theme.render_to_response('popular_threads.html',
-                                            {
-                                             'items_total': items_total,
-                                             'threads': Thread.objects.with_reads(queryset, request.user),
-                                             'pagination': pagination,
-                                             },
-                                            context_instance=RequestContext(request));
+    return render_to_response('popular_threads.html',
+                              {
+                              'items_total': items_total,
+                              'threads': Thread.objects.with_reads(queryset, request.user),
+                              'pagination': pagination,
+                              },
+                              context_instance=RequestContext(request));

+ 5 - 5
misago/apps/profiles/details/views.py

@@ -1,10 +1,10 @@
+from misago.shortcuts import render_to_response
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.template import RequestContext
 from misago.apps.profiles.template import RequestContext
 
 
 @profile_view('user_details')
 @profile_view('user_details')
 def details(request, user):
 def details(request, user):
-    return request.theme.render_to_response('profiles/details.html',
-                                            context_instance=RequestContext(request, {
-                                             'profile': user,
-                                             'tab': 'details',
-                                             }));
+    return render_to_response('profiles/details.html',
+                              context_instance=RequestContext(request, {
+                                'profile': user,
+                                'tab': 'details',}));

+ 9 - 9
misago/apps/profiles/followers/views.py

@@ -1,9 +1,10 @@
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.http import Http404
 from django.http import Http404
 from django.shortcuts import redirect
 from django.shortcuts import redirect
+from misago.shortcuts import render_to_response
+from misago.utils.pagination import make_pagination
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.template import RequestContext
 from misago.apps.profiles.template import RequestContext
-from misago.utils.pagination import make_pagination
 
 
 @profile_view('user_followers')
 @profile_view('user_followers')
 def followers(request, user, page=0):
 def followers(request, user, page=0):
@@ -14,11 +15,10 @@ def followers(request, user, page=0):
     except Http404:
     except Http404:
         return redirect(reverse('user_followers', kwargs={'user': user.id, 'username': user.username_slug}))
         return redirect(reverse('user_followers', kwargs={'user': user.id, 'username': user.username_slug}))
     
     
-    return request.theme.render_to_response('profiles/followers.html',
-                                            context_instance=RequestContext(request, {
-                                             'profile': user,
-                                             'tab': 'followers',
-                                             'items_total': count,
-                                             'items': queryset[pagination['start']:pagination['stop']],
-                                             'pagination': pagination,
-                                             }));
+    return render_to_response('profiles/followers.html',
+                              context_instance=RequestContext(request, {
+                                  'profile': user,
+                                  'tab': 'followers',
+                                  'items_total': count,
+                                  'items': queryset[pagination['start']:pagination['stop']],
+                                  'pagination': pagination,}));

+ 9 - 9
misago/apps/profiles/follows/views.py

@@ -1,9 +1,10 @@
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.http import Http404
 from django.http import Http404
 from django.shortcuts import redirect
 from django.shortcuts import redirect
+from misago.shortcuts import render_to_response
+from misago.utils.pagination import make_pagination
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.template import RequestContext
 from misago.apps.profiles.template import RequestContext
-from misago.utils.pagination import make_pagination
 
 
 @profile_view('user_follows')
 @profile_view('user_follows')
 def follows(request, user, page=0):
 def follows(request, user, page=0):
@@ -14,11 +15,10 @@ def follows(request, user, page=0):
     except Http404:
     except Http404:
         return redirect(reverse('user_follows', kwargs={'user': user.id, 'username': user.username_slug}))
         return redirect(reverse('user_follows', kwargs={'user': user.id, 'username': user.username_slug}))
 
 
-    return request.theme.render_to_response('profiles/follows.html',
-                                            context_instance=RequestContext(request, {
-                                             'profile': user,
-                                             'tab': 'follows',
-                                             'items_total': count,
-                                             'items': queryset[pagination['start']:pagination['stop']],
-                                             'pagination': pagination,
-                                             }));
+    return render_to_response('profiles/follows.html',
+                              context_instance=RequestContext(request, {
+                                  'profile': user,
+                                  'tab': 'follows',
+                                  'items_total': count,
+                                  'items': queryset[pagination['start']:pagination['stop']],
+                                  'pagination': pagination,}));

+ 9 - 8
misago/apps/profiles/posts/views.py

@@ -4,6 +4,7 @@ from django.shortcuts import redirect
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.template import RequestContext
 from misago.apps.profiles.template import RequestContext
 from misago.models import Forum
 from misago.models import Forum
+from misago.shortcuts import render_to_response
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 
 
 @profile_view('user_posts')
 @profile_view('user_posts')
@@ -15,11 +16,11 @@ def posts(request, user, page=0):
     except Http404:
     except Http404:
         return redirect(reverse('user_posts', kwargs={'user': user.id, 'username': user.username_slug}))
         return redirect(reverse('user_posts', kwargs={'user': user.id, 'username': user.username_slug}))
     
     
-    return request.theme.render_to_response('profiles/posts.html',
-                                            context_instance=RequestContext(request, {
-                                             'profile': user,
-                                             'tab': 'posts',
-                                             'items_total': count,
-                                             'items': queryset[pagination['start']:pagination['stop']],
-                                             'pagination': pagination,
-                                             }));
+    return render_to_response('profiles/posts.html',
+                              context_instance=RequestContext(request, {
+                                  'profile': user,
+                                  'tab': 'posts',
+                                  'items_total': count,
+                                  'items': queryset[pagination['start']:pagination['stop']],
+                                  'pagination': pagination,
+                                  }));

+ 9 - 8
misago/apps/profiles/threads/views.py

@@ -4,6 +4,7 @@ from django.shortcuts import redirect
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.decorators import profile_view
 from misago.apps.profiles.template import RequestContext
 from misago.apps.profiles.template import RequestContext
 from misago.models import Forum
 from misago.models import Forum
+from misago.shortcuts import render_to_response
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 
 
 @profile_view('user_threads')
 @profile_view('user_threads')
@@ -15,11 +16,11 @@ def threads(request, user, page=0):
     except Http404:
     except Http404:
         return redirect(reverse('user_threads', kwargs={'user': user.id, 'username': user.username_slug}))
         return redirect(reverse('user_threads', kwargs={'user': user.id, 'username': user.username_slug}))
     
     
-    return request.theme.render_to_response('profiles/threads.html',
-                                            context_instance=RequestContext(request, {
-                                             'profile': user,
-                                             'tab': 'threads',
-                                             'items_total': count,
-                                             'items': queryset[pagination['start']:pagination['stop']],
-                                             'pagination': pagination,
-                                             }));
+    return render_to_response('profiles/threads.html',
+                              context_instance=RequestContext(request, {
+                                  'profile': user,
+                                  'tab': 'threads',
+                                  'items_total': count,
+                                  'items': queryset[pagination['start']:pagination['stop']],
+                                  'pagination': pagination,
+                                  }));

+ 14 - 13
misago/apps/profiles/views.py

@@ -7,6 +7,7 @@ from misago.apps.errors import error403, error404
 from misago.forms import FormFields
 from misago.forms import FormFields
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Rank, User
 from misago.models import Rank, User
+from misago.shortcuts import render_to_response
 from misago.utils.strings import slugify
 from misago.utils.strings import slugify
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 from misago.apps.profiles.forms import QuickFindUserForm
 from misago.apps.profiles.forms import QuickFindUserForm
@@ -89,16 +90,16 @@ def list(request, slug=None, page=0):
                 users = users.select_related(*settings.PROFILE_EXTENSIONS_PRELOAD)
                 users = users.select_related(*settings.PROFILE_EXTENSIONS_PRELOAD)
             users = users.order_by('username_slug')[pagination['start']:pagination['stop']]
             users = users.order_by('username_slug')[pagination['start']:pagination['stop']]
 
 
-    return request.theme.render_to_response('profiles/list.html',
-                                        {
-                                         'message': message,
-                                         'search_form': FormFields(search_form).fields,
-                                         'in_search': in_search,
-                                         'active_rank': active_rank,
-                                         'default_rank': default_rank,
-                                         'items_total': items_total,
-                                         'ranks': ranks,
-                                         'users': users,
-                                         'pagination': pagination,
-                                        },
-                                        context_instance=RequestContext(request));
+    return render_to_response('profiles/list.html',
+                              {
+                              'message': message,
+                              'search_form': FormFields(search_form).fields,
+                              'in_search': in_search,
+                              'active_rank': active_rank,
+                              'default_rank': default_rank,
+                              'items_total': items_total,
+                              'ranks': ranks,
+                              'users': users,
+                              'pagination': pagination,
+                              },
+                              context_instance=RequestContext(request));

+ 8 - 7
misago/apps/register/views.py

@@ -8,6 +8,7 @@ from misago.decorators import block_authenticated, block_banned, block_crawlers,
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import SignInAttempt, User
 from misago.models import SignInAttempt, User
+from misago.shortcuts import render_to_response
 from misago.utils.views import redirect_message
 from misago.utils.views import redirect_message
 from misago.apps.register.forms import UserRegisterForm
 from misago.apps.register.forms import UserRegisterForm
 
 
@@ -75,10 +76,10 @@ def form(request):
                 return redirect(reverse('register'))
                 return redirect(reverse('register'))
     else:
     else:
         form = UserRegisterForm(request=request)
         form = UserRegisterForm(request=request)
-    return request.theme.render_to_response('register.html',
-                                            {
-                                             'message': message,
-                                             'form': FormLayout(form),
-                                             'hide_signin': True, 
-                                            },
-                                            context_instance=RequestContext(request));
+    return render_to_response('register.html',
+                              {
+                              'message': message,
+                              'form': FormLayout(form),
+                              'hide_signin': True, 
+                              },
+                              context_instance=RequestContext(request));

+ 7 - 6
misago/apps/resetpswd/views.py

@@ -5,6 +5,7 @@ from misago.decorators import block_authenticated, block_banned, block_crawlers,
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Ban, Session, Token, User
 from misago.models import Ban, Session, Token, User
+from misago.shortcuts import render_to_response
 from misago.utils.strings import random_string
 from misago.utils.strings import random_string
 from misago.utils.views import redirect_message
 from misago.utils.views import redirect_message
 from misago.apps.resetpswd.forms import UserResetPasswordForm
 from misago.apps.resetpswd.forms import UserResetPasswordForm
@@ -41,12 +42,12 @@ def form(request):
             message = Message(form.non_field_errors()[0], 'error')
             message = Message(form.non_field_errors()[0], 'error')
     else:
     else:
         form = UserResetPasswordForm(request=request)
         form = UserResetPasswordForm(request=request)
-    return request.theme.render_to_response('reset_password.html',
-                                            {
-                                             'message': message,
-                                             'form': FormLayout(form),
-                                            },
-                                            context_instance=RequestContext(request));
+    return render_to_response('reset_password.html',
+                              {
+                              'message': message,
+                              'form': FormLayout(form),
+                              },
+                              context_instance=RequestContext(request));
 
 
 
 
 @block_banned
 @block_banned

+ 4 - 3
misago/apps/search/views.py

@@ -11,6 +11,7 @@ from misago.decorators import block_crawlers
 from misago.forms import FormFields
 from misago.forms import FormFields
 from misago.models import Forum, Thread, Post, User
 from misago.models import Forum, Thread, Post, User
 from misago.search import SearchException
 from misago.search import SearchException
+from misago.shortcuts import render_to_response
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 from misago.apps.errors import error403, error404
 from misago.apps.errors import error403, error404
 from misago.apps.profiles.views import list as users_list
 from misago.apps.profiles.views import list as users_list
@@ -64,9 +65,9 @@ class ViewBase(object):
             context['search_thread'] = self.thread_clean
             context['search_thread'] = self.thread_clean
         except AttributeError:
         except AttributeError:
             pass
             pass
-        return self.request.theme.render_to_response('search/%s.html' % template,
-                                                     context,
-                                                     context_instance=RequestContext(self.request))
+        return render_to_response('search/%s.html' % template,
+                                  context,
+                                  context_instance=RequestContext(self.request))
 
 
     def __new__(cls, request, **kwargs):
     def __new__(cls, request, **kwargs):
         obj = super(ViewBase, cls).__new__(cls)
         obj = super(ViewBase, cls).__new__(cls)

+ 11 - 10
misago/apps/signin/views.py

@@ -12,6 +12,7 @@ from misago.auth import AuthException, auth_admin, auth_forum, sign_user_in
 from misago.decorators import (block_authenticated, block_banned, block_crawlers,
 from misago.decorators import (block_authenticated, block_banned, block_crawlers,
                             block_guest, block_jammed, check_csrf)
                             block_guest, block_jammed, check_csrf)
 from misago.models import SignInAttempt, Token
 from misago.models import SignInAttempt, Token
+from misago.shortcuts import render_to_response
 from misago.utils.strings import random_string
 from misago.utils.strings import random_string
 from misago.apps.signin.forms import SignInForm
 from misago.apps.signin.forms import SignInForm
 
 
@@ -86,16 +87,16 @@ def signin(request):
                           show_remember_me=not request.firewall.admin and request.settings['remember_me_allow'],
                           show_remember_me=not request.firewall.admin and request.settings['remember_me_allow'],
                           request=request
                           request=request
                           )
                           )
-    return request.theme.render_to_response('signin.html',
-                                            {
-                                             'message': message,
-                                             'bad_password': bad_password,
-                                             'banned_account': banned_account,
-                                             'not_active': not_active,
-                                             'form': FormLayout(form),
-                                             'hide_signin': True,
-                                             },
-                                            context_instance=RequestContext(request));
+    return render_to_response('signin.html',
+                              {
+                              'message': message,
+                              'bad_password': bad_password,
+                              'banned_account': banned_account,
+                              'not_active': not_active,
+                              'form': FormLayout(form),
+                              'hide_signin': True,
+                              },
+                              context_instance=RequestContext(request));
 
 
 
 
 @block_crawlers
 @block_crawlers

+ 26 - 25
misago/apps/threadtype/changelog.py

@@ -8,6 +8,7 @@ from misago.apps.errors import error403, error404
 from misago.markdown import post_markdown
 from misago.markdown import post_markdown
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, Thread, Post, Change
 from misago.models import Forum, Thread, Post, Change
+from misago.shortcuts import render_to_response
 from misago.utils.datesformats import reldate
 from misago.utils.datesformats import reldate
 from misago.utils.strings import slugify
 from misago.utils.strings import slugify
 from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.base import ViewBase
@@ -51,16 +52,16 @@ class ChangelogBaseView(ViewBase):
 
 
 class ChangelogChangesBaseView(ChangelogBaseView):
 class ChangelogChangesBaseView(ChangelogBaseView):
     def dispatch(self, request, **kwargs):
     def dispatch(self, request, **kwargs):
-        return request.theme.render_to_response('%ss/changelog.html' % self.type_prefix,
-                                                self.template_vars({
-                                                 'type_prefix': self.type_prefix,
-                                                 'forum': self.forum,
-                                                 'parents': self.parents,
-                                                 'thread': self.thread,
-                                                 'post': self.post,
-                                                 'edits': self.post.change_set.prefetch_related('user').order_by('-id')
-                                                 }),
-                                                context_instance=RequestContext(request))
+        return render_to_response('%ss/changelog.html' % self.type_prefix,
+                                  self.template_vars({
+                                      'type_prefix': self.type_prefix,
+                                      'forum': self.forum,
+                                      'parents': self.parents,
+                                      'thread': self.thread,
+                                      'post': self.post,
+                                      'edits': self.post.change_set.prefetch_related('user').order_by('-id')
+                                      }),
+                                  context_instance=RequestContext(request))
 
 
 
 
 class ChangelogDiffBaseView(ChangelogBaseView):
 class ChangelogDiffBaseView(ChangelogBaseView):
@@ -78,21 +79,21 @@ class ChangelogDiffBaseView(ChangelogBaseView):
         except IndexError:
         except IndexError:
             prev = None
             prev = None
         self.forum.closed = self.proxy.closed
         self.forum.closed = self.proxy.closed
-        return request.theme.render_to_response('%ss/changelog_diff.html' % self.type_prefix,
-                                                self.template_vars({
-                                                 'type_prefix': self.type_prefix,
-                                                 'forum': self.forum,
-                                                 'parents': self.parents,
-                                                 'thread': self.thread,
-                                                 'post': self.post,
-                                                 'change': self.change,
-                                                 'next': next,
-                                                 'prev': prev,
-                                                 'message': request.messages.get_message('changelog'),
-                                                 'l': 1,
-                                                 'diff': difflib.ndiff(self.change.post_content.splitlines(), self.post.post.splitlines()),
-                                                 }),
-                                                context_instance=RequestContext(request))
+        return render_to_response('%ss/changelog_diff.html' % self.type_prefix,
+                                  self.template_vars({
+                                      'type_prefix': self.type_prefix,
+                                      'forum': self.forum,
+                                      'parents': self.parents,
+                                      'thread': self.thread,
+                                      'post': self.post,
+                                      'change': self.change,
+                                      'next': next,
+                                      'prev': prev,
+                                      'message': request.messages.get_message('changelog'),
+                                      'l': 1,
+                                      'diff': difflib.ndiff(self.change.post_content.splitlines(), self.post.post.splitlines()),
+                                      }),
+                                  context_instance=RequestContext(request))
 
 
 
 
 class ChangelogRevertBaseView(ChangelogDiffBaseView):
 class ChangelogRevertBaseView(ChangelogDiffBaseView):

+ 21 - 20
misago/apps/threadtype/details.py

@@ -2,6 +2,7 @@ from django.template import RequestContext
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.apps.errors import error403, error404
 from misago.apps.errors import error403, error404
 from misago.models import Forum, Thread, Post
 from misago.models import Forum, Thread, Post
+from misago.shortcuts import render_to_response
 from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.base import ViewBase
 
 
 class ExtraBaseView(ViewBase):
 class ExtraBaseView(ViewBase):
@@ -44,15 +45,15 @@ class DetailsBaseView(ExtraBaseView):
         self.request.acl.users.allow_details_view()
         self.request.acl.users.allow_details_view()
 
 
     def response(self):
     def response(self):
-        return self.request.theme.render_to_response('%ss/details.html' % self.type_prefix,
-                                                     self.template_vars({
-                                                      'type_prefix': self.type_prefix,
-                                                      'forum': self.forum,
-                                                      'parents': self.parents,
-                                                      'thread': self.thread,
-                                                      'post': self.post,
-                                                     }),
-                                                     context_instance=RequestContext(self.request))
+        return render_to_response('%ss/details.html' % self.type_prefix,
+                                  self.template_vars({
+                                      'type_prefix': self.type_prefix,
+                                      'forum': self.forum,
+                                      'parents': self.parents,
+                                      'thread': self.thread,
+                                      'post': self.post,
+                                      }),
+                                  context_instance=RequestContext(self.request))
 
 
 
 
 class KarmaVotesBaseView(ExtraBaseView):
 class KarmaVotesBaseView(ExtraBaseView):
@@ -60,14 +61,14 @@ class KarmaVotesBaseView(ExtraBaseView):
         self.request.acl.threads.allow_post_votes_view(self.forum)
         self.request.acl.threads.allow_post_votes_view(self.forum)
 
 
     def response(self):
     def response(self):
-        return self.request.theme.render_to_response('%ss/karmas.html' % self.type_prefix,
-                                                     self.template_vars({
-                                                      'type_prefix': self.type_prefix,
-                                                      'forum': self.forum,
-                                                      'parents': self.parents,
-                                                      'thread': self.thread,
-                                                      'post': self.post,
-                                                      'upvotes': self.post.karma_set.filter(score=1),
-                                                      'downvotes': self.post.karma_set.filter(score=-1),
-                                                      }),
-                                                     context_instance=RequestContext(self.request))
+        return render_to_response('%ss/karmas.html' % self.type_prefix,
+                                  self.template_vars({
+                                      'type_prefix': self.type_prefix,
+                                      'forum': self.forum,
+                                      'parents': self.parents,
+                                      'thread': self.thread,
+                                      'post': self.post,
+                                      'upvotes': self.post.karma_set.filter(score=1),
+                                      'downvotes': self.post.karma_set.filter(score=-1),
+                                      }),
+                                  context_instance=RequestContext(self.request))

+ 22 - 21
misago/apps/threadtype/list/moderation.py

@@ -5,6 +5,7 @@ from django.utils.translation import ugettext as _
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, Thread, Post
 from misago.models import Forum, Thread, Post
+from misago.shortcuts import render_to_response
 from misago.apps.threadtype.list.forms import MoveThreadsForm, MergeThreadsForm
 from misago.apps.threadtype.list.forms import MoveThreadsForm, MergeThreadsForm
 from misago.utils.strings import slugify
 from misago.utils.strings import slugify
 
 
@@ -113,16 +114,16 @@ class ThreadsListModeration(object):
             self.message = Message(form.non_field_errors()[0], 'error')
             self.message = Message(form.non_field_errors()[0], 'error')
         else:
         else:
             form = MoveThreadsForm(request=self.request, forum=self.forum)
             form = MoveThreadsForm(request=self.request, forum=self.forum)
-        return self.request.theme.render_to_response('%ss/move_threads.html' % self.type_prefix,
-                                                     {
-                                                      'type_prefix': self.type_prefix,
-                                                      'message': self.message,
-                                                      'forum': self.forum,
-                                                      'parents': self.parents,
-                                                      'threads': threads,
-                                                      'form': FormLayout(form),
-                                                      },
-                                                     context_instance=RequestContext(self.request));
+        return render_to_response('%ss/move_threads.html' % self.type_prefix,
+                                  {
+                                  'type_prefix': self.type_prefix,
+                                  'message': self.message,
+                                  'forum': self.forum,
+                                  'parents': self.parents,
+                                  'threads': threads,
+                                  'form': FormLayout(form),
+                                  },
+                                  context_instance=RequestContext(self.request));
 
 
     def action_merge(self, ids):
     def action_merge(self, ids):
         if len(ids) < 2:
         if len(ids) < 2:
@@ -169,17 +170,17 @@ class ThreadsListModeration(object):
             else:
             else:
                 lookback = thread.last_post_id
                 lookback = thread.last_post_id
 
 
-        return self.request.theme.render_to_response(('%ss/merge.html' % self.type_prefix),
-                                                     {
-                                                      'type_prefix': self.type_prefix,
-                                                      'message': self.message,
-                                                      'warning': warning,
-                                                      'forum': self.forum,
-                                                      'parents': self.parents,
-                                                      'threads': threads,
-                                                      'form': FormLayout(form),
-                                                      },
-                                                     context_instance=RequestContext(self.request));
+        return render_to_response('%ss/merge.html' % self.type_prefix,
+                                  {
+                                  'type_prefix': self.type_prefix,
+                                  'message': self.message,
+                                  'warning': warning,
+                                  'forum': self.forum,
+                                  'parents': self.parents,
+                                  'threads': threads,
+                                  'form': FormLayout(form),
+                                  },
+                                  context_instance=RequestContext(self.request));
 
 
     def action_open(self, ids):
     def action_open(self, ids):
         if self._action_open(ids):
         if self._action_open(ids):

+ 13 - 12
misago/apps/threadtype/list/views.py

@@ -10,6 +10,7 @@ from misago.forms import Form, FormFields
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, Thread, Post
 from misago.models import Forum, Thread, Post
 from misago.readstrackers import ForumsTracker
 from misago.readstrackers import ForumsTracker
+from misago.shortcuts import render_to_response
 from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.base import ViewBase
 
 
 class ThreadsListBaseView(ViewBase):
 class ThreadsListBaseView(ViewBase):
@@ -117,15 +118,15 @@ class ThreadsListBaseView(ViewBase):
         # Merge proxy into forum
         # Merge proxy into forum
         self.forum.closed = self.proxy.closed
         self.forum.closed = self.proxy.closed
 
 
-        return request.theme.render_to_response('%ss/%s.html' % (self.type_prefix, self.template),
-                                                self.template_vars({
-                                                 'type_prefix': self.type_prefix,
-                                                 'message': self.message,
-                                                 'forum': self.forum,
-                                                 'parents': self.parents,
-                                                 'count': self.count,
-                                                 'list_form': FormFields(self.form).fields if self.form else None,
-                                                 'threads': self.threads,
-                                                 'pagination': self.pagination,
-                                                 }),
-                                                context_instance=RequestContext(request));
+        return render_to_response('%ss/%s.html' % (self.type_prefix, self.template),
+                                  self.template_vars({
+                                      'type_prefix': self.type_prefix,
+                                      'message': self.message,
+                                      'forum': self.forum,
+                                      'parents': self.parents,
+                                      'count': self.count,
+                                      'list_form': FormFields(self.form).fields if self.form else None,
+                                      'threads': self.threads,
+                                      'pagination': self.pagination,
+                                      }),
+                                  context_instance=RequestContext(request));

+ 16 - 15
misago/apps/threadtype/posting/base.py

@@ -6,6 +6,7 @@ from misago.forms import FormLayout
 from misago.markdown import emojis, post_markdown
 from misago.markdown import emojis, post_markdown
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, Thread, Post, WatchedThread
 from misago.models import Forum, Thread, Post, WatchedThread
+from misago.shortcuts import render_to_response
 from misago.utils.translation import ugettext_lazy
 from misago.utils.translation import ugettext_lazy
 from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.thread.forms import QuickReplyForm
 from misago.apps.threadtype.thread.forms import QuickReplyForm
@@ -147,18 +148,18 @@ class PostingBaseView(ViewBase):
         except ACLError404 as e:
         except ACLError404 as e:
             return error404(request, unicode(e))
             return error404(request, unicode(e))
 
 
-        return request.theme.render_to_response(('%ss/posting.html' % self.type_prefix),
-                                                self.template_vars({
-                                                 'type_prefix': self.type_prefix,
-                                                 'action': self.action,
-                                                 'message': self.message,
-                                                 'forum': self.forum,
-                                                 'thread': self.thread,
-                                                 'quote': self.quote,
-                                                 'post': self.post,
-                                                 'parents': self.parents,
-                                                 'preview': post_preview,
-                                                 'form': FormLayout(form),
-                                                 'emojis': emojis(),
-                                                 }),
-                                                context_instance=RequestContext(request));
+        return render_to_response('%ss/posting.html' % self.type_prefix,
+                                  self.template_vars({
+                                      'type_prefix': self.type_prefix,
+                                      'action': self.action,
+                                      'message': self.message,
+                                      'forum': self.forum,
+                                      'thread': self.thread,
+                                      'quote': self.quote,
+                                      'post': self.post,
+                                      'parents': self.parents,
+                                      'preview': post_preview,
+                                      'form': FormLayout(form),
+                                      'emojis': emojis(),
+                                      }),
+                                  context_instance=RequestContext(request));

+ 23 - 22
misago/apps/threadtype/thread/moderation/posts.py

@@ -7,6 +7,7 @@ from django.utils.translation import ugettext as _
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.markdown import post_markdown
 from misago.markdown import post_markdown
 from misago.messages import Message
 from misago.messages import Message
+from misago.shortcuts import render_to_response
 from misago.utils.strings import slugify
 from misago.utils.strings import slugify
 from misago.apps.threadtype.thread.moderation.forms import SplitThreadForm, MovePostsForm
 from misago.apps.threadtype.thread.moderation.forms import SplitThreadForm, MovePostsForm
 
 
@@ -88,17 +89,17 @@ class PostsModeration(object):
                                                                   'thread_name': _('[Split] %s') % self.thread.name,
                                                                   'thread_name': _('[Split] %s') % self.thread.name,
                                                                   'thread_forum': self.forum,
                                                                   'thread_forum': self.forum,
                                                                   })
                                                                   })
-        return self.request.theme.render_to_response('%ss/split.html' % self.type_prefix,
-                                                     {
-                                                      'type_prefix': self.type_prefix,
-                                                      'message': message,
-                                                      'forum': self.forum,
-                                                      'parents': self.parents,
-                                                      'thread': self.thread,
-                                                      'posts': ids,
-                                                      'form': FormLayout(form),
-                                                      },
-                                                     context_instance=RequestContext(self.request));
+        return render_to_response('%ss/split.html' % self.type_prefix,
+                                  {
+                                  'type_prefix': self.type_prefix,
+                                  'message': message,
+                                  'forum': self.forum,
+                                  'parents': self.parents,
+                                  'thread': self.thread,
+                                  'posts': ids,
+                                  'form': FormLayout(form),
+                                  },
+                                  context_instance=RequestContext(self.request));
 
 
     def post_action_move(self, ids):
     def post_action_move(self, ids):
         message = None
         message = None
@@ -127,17 +128,17 @@ class PostsModeration(object):
             message = Message(form.non_field_errors()[0], 'error')
             message = Message(form.non_field_errors()[0], 'error')
         else:
         else:
             form = MovePostsForm(request=self.request)
             form = MovePostsForm(request=self.request)
-        return self.request.theme.render_to_response('%ss/move_posts.html' % self.type_prefix,
-                                                     {
-                                                      'type_prefix': self.type_prefix,
-                                                      'message': message,
-                                                      'forum': self.forum,
-                                                      'parents': self.parents,
-                                                      'thread': self.thread,
-                                                      'posts': ids,
-                                                      'form': FormLayout(form),
-                                                      },
-                                                     context_instance=RequestContext(self.request));
+        return render_to_response('%ss/move_posts.html' % self.type_prefix,
+                                  {
+                                  'type_prefix': self.type_prefix,
+                                  'message': message,
+                                  'forum': self.forum,
+                                  'parents': self.parents,
+                                  'thread': self.thread,
+                                  'posts': ids,
+                                  'form': FormLayout(form),
+                                  },
+                                  context_instance=RequestContext(self.request));
 
 
     def post_action_protect(self, ids):
     def post_action_protect(self, ids):
         protected = 0
         protected = 0

+ 11 - 10
misago/apps/threadtype/thread/moderation/thread.py

@@ -2,6 +2,7 @@ from django.template import RequestContext
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
 from misago.forms import Form, FormLayout
 from misago.forms import Form, FormLayout
 from misago.messages import Message
 from misago.messages import Message
+from misago.shortcuts import render_to_response
 from misago.apps.threadtype.list.forms import MoveThreadsForm
 from misago.apps.threadtype.list.forms import MoveThreadsForm
 
 
 class ThreadModeration(object):
 class ThreadModeration(object):
@@ -72,16 +73,16 @@ class ThreadModeration(object):
             message = Message(form.non_field_errors()[0], 'error')
             message = Message(form.non_field_errors()[0], 'error')
         else:
         else:
             form = MoveThreadsForm(request=self.request, forum=self.forum)
             form = MoveThreadsForm(request=self.request, forum=self.forum)
-        return self.request.theme.render_to_response('%ss/move_thread.html' % self.type_prefix,
-                                                     {
-                                                      'type_prefix': self.type_prefix,
-                                                      'message': message,
-                                                      'forum': self.forum,
-                                                      'parents': self.parents,
-                                                      'thread': self.thread,
-                                                      'form': FormLayout(form),
-                                                      },
-                                                     context_instance=RequestContext(self.request));
+        return render_to_response('%ss/move_thread.html' % self.type_prefix,
+                                  {
+                                  'type_prefix': self.type_prefix,
+                                  'message': message,
+                                  'forum': self.forum,
+                                  'parents': self.parents,
+                                  'thread': self.thread,
+                                  'form': FormLayout(form),
+                                  },
+                                  context_instance=RequestContext(self.request));
 
 
     def thread_action_open(self):
     def thread_action_open(self):
         self.thread.closed = False
         self.thread.closed = False

+ 20 - 19
misago/apps/threadtype/thread/views.py

@@ -13,6 +13,7 @@ from misago.markdown import emojis
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, Thread, Post, Karma, WatchedThread
 from misago.models import Forum, Thread, Post, Karma, WatchedThread
 from misago.readstrackers import ThreadsTracker
 from misago.readstrackers import ThreadsTracker
+from misago.shortcuts import render_to_response
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.thread.forms import QuickReplyForm
 from misago.apps.threadtype.thread.forms import QuickReplyForm
@@ -206,22 +207,22 @@ class ThreadBaseView(ViewBase):
         # Merge proxy into forum
         # Merge proxy into forum
         self.forum.closed = self.proxy.closed
         self.forum.closed = self.proxy.closed
 
 
-        return request.theme.render_to_response('%ss/thread.html' % self.type_prefix,
-                                                self.template_vars({
-                                                 'type_prefix': self.type_prefix,
-                                                 'message': self.message,
-                                                 'forum': self.forum,
-                                                 'parents': self.parents,
-                                                 'thread': self.thread,
-                                                 'is_read': self.tracker.is_read(self.thread),
-                                                 'count': self.count,
-                                                 'posts': self.posts,
-                                                 'ignored_posts': self.ignored,
-                                                 'watcher': self.watcher,
-                                                 'pagination': self.pagination,
-                                                 'emojis': emojis(),
-                                                 'quick_reply': FormFields(QuickReplyForm(request=request)).fields,
-                                                 'thread_form': FormFields(self.thread_form).fields if self.thread_form else None,
-                                                 'posts_form': FormFields(self.posts_form).fields if self.posts_form else None,
-                                                 }),
-                                                context_instance=RequestContext(request));
+        return render_to_response('%ss/thread.html' % self.type_prefix,
+                                  self.template_vars({
+                                      'type_prefix': self.type_prefix,
+                                      'message': self.message,
+                                      'forum': self.forum,
+                                      'parents': self.parents,
+                                      'thread': self.thread,
+                                      'is_read': self.tracker.is_read(self.thread),
+                                      'count': self.count,
+                                      'posts': self.posts,
+                                      'ignored_posts': self.ignored,
+                                      'watcher': self.watcher,
+                                      'pagination': self.pagination,
+                                      'emojis': emojis(),
+                                      'quick_reply': FormFields(QuickReplyForm(request=request)).fields,
+                                      'thread_form': FormFields(self.thread_form).fields if self.thread_form else None,
+                                      'posts_form': FormFields(self.posts_form).fields if self.posts_form else None,
+                                      }),
+                                  context_instance=RequestContext(request));

+ 3 - 2
misago/apps/tos.py

@@ -1,8 +1,9 @@
 from django.template import RequestContext
 from django.template import RequestContext
+from misago.shortcuts import render_to_response
 from misago.apps.errors import error404
 from misago.apps.errors import error404
 
 
 def tos(request):
 def tos(request):
     if request.settings.tos_url or not request.settings.tos_content:
     if request.settings.tos_url or not request.settings.tos_content:
         return error404(request)
         return error404(request)
-    return request.theme.render_to_response('forum_tos.html',
-                                            context_instance=RequestContext(request));
+    return render_to_response('forum_tos.html',
+                              context_instance=RequestContext(request));

+ 25 - 29
misago/apps/usercp/avatar/views.py

@@ -11,6 +11,7 @@ from misago.apps.errors import error404
 from misago.decorators import block_guest
 from misago.decorators import block_guest
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
+from misago.shortcuts import render_to_response
 from misago.utils.strings import random_string
 from misago.utils.strings import random_string
 from misago.utils.avatars import resizeimage
 from misago.utils.avatars import resizeimage
 from misago.apps.usercp.template import RequestContext
 from misago.apps.usercp.template import RequestContext
@@ -20,10 +21,9 @@ def avatar_view(f):
     def decorator(*args, **kwargs):
     def decorator(*args, **kwargs):
         request = args[0]
         request = args[0]
         if request.user.avatar_ban:
         if request.user.avatar_ban:
-            return request.theme.render_to_response('usercp/avatar_banned.html',
-                                                    context_instance=RequestContext(request, {
-                                                     'tab': 'avatar',
-                                                     }));
+            return render_to_response('usercp/avatar_banned.html',
+                                      context_instance=RequestContext(request, {
+                                          'tab': 'avatar'}));
         return f(*args, **kwargs)
         return f(*args, **kwargs)
     return decorator
     return decorator
 
 
@@ -32,11 +32,10 @@ def avatar_view(f):
 @avatar_view
 @avatar_view
 def avatar(request):
 def avatar(request):
     message = request.messages.get_message('usercp_avatar')
     message = request.messages.get_message('usercp_avatar')
-    return request.theme.render_to_response('usercp/avatar.html',
-                                            context_instance=RequestContext(request, {
-                                             'message': message,
-                                             'tab': 'avatar',
-                                             }));
+    return render_to_response('usercp/avatar.html',
+                              context_instance=RequestContext(request, {
+                                  'message': message,
+                                  'tab': 'avatar'}));
 
 
 
 
 @block_guest
 @block_guest
@@ -94,12 +93,11 @@ def gallery(request):
         else:
         else:
             message = Message(_("Request authorisation is invalid."), 'error')
             message = Message(_("Request authorisation is invalid."), 'error')
 
 
-    return request.theme.render_to_response('usercp/avatar_gallery.html',
-                                            context_instance=RequestContext(request, {
-                                             'message': message,
-                                             'galleries': galleries,
-                                             'tab': 'avatar',
-                                             }));
+    return render_to_response('usercp/avatar_gallery.html',
+                              context_instance=RequestContext(request, {
+                                  'message': message,
+                                  'galleries': galleries,
+                                  'tab': 'avatar'}));
 
 
 
 
 @block_guest
 @block_guest
@@ -162,12 +160,11 @@ def upload(request):
     else:
     else:
         form = UploadAvatarForm(request=request)
         form = UploadAvatarForm(request=request)
 
 
-    return request.theme.render_to_response('usercp/avatar_upload.html',
-                                            context_instance=RequestContext(request, {
-                                             'message': message,
-                                             'form': FormLayout(form),
-                                             'tab': 'avatar',
-                                             }));
+    return render_to_response('usercp/avatar_upload.html',
+                              context_instance=RequestContext(request, {
+                                  'message': message,
+                                  'form': FormLayout(form),
+                                  'tab': 'avatar'}));
 
 
 
 
 @block_guest
 @block_guest
@@ -223,11 +220,10 @@ def crop(request, upload=False):
             message = Message(_("Request authorisation is invalid."), 'error')
             message = Message(_("Request authorisation is invalid."), 'error')
 
 
 
 
-    return request.theme.render_to_response('usercp/avatar_crop.html',
-                                            context_instance=RequestContext(request, {
-                                             'message': message,
-                                             'after_upload': upload,
-                                             'avatar_size': settings.AVATAR_SIZES[0],
-                                             'source': 'avatars/%s' % (request.user.avatar_temp if upload else request.user.avatar_original),
-                                             'tab': 'avatar',
-                                             }));
+    return render_to_response('usercp/avatar_crop.html',
+                              context_instance=RequestContext(request, {
+                                  'message': message,
+                                  'after_upload': upload,
+                                  'avatar_size': settings.AVATAR_SIZES[0],
+                                  'source': 'avatars/%s' % (request.user.avatar_temp if upload else request.user.avatar_original),
+                                  'tab': 'avatar'}));

+ 6 - 6
misago/apps/usercp/credentials/views.py

@@ -6,6 +6,7 @@ from misago.apps.errors import error404
 from misago.decorators import block_guest
 from misago.decorators import block_guest
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
+from misago.shortcuts import render_to_response
 from misago.utils.strings import random_string
 from misago.utils.strings import random_string
 from misago.apps.usercp.template import RequestContext
 from misago.apps.usercp.template import RequestContext
 from misago.apps.usercp.credentials.forms import CredentialsChangeForm
 from misago.apps.usercp.credentials.forms import CredentialsChangeForm
@@ -39,12 +40,11 @@ def credentials(request):
     else:
     else:
         form = CredentialsChangeForm(request=request)
         form = CredentialsChangeForm(request=request)
 
 
-    return request.theme.render_to_response('usercp/credentials.html',
-                                            context_instance=RequestContext(request, {
-                                             'message': message,
-                                             'form': FormLayout(form),
-                                             'tab': 'credentials',
-                                             }));
+    return render_to_response('usercp/credentials.html',
+                              context_instance=RequestContext(request, {
+                                  'message': message,
+                                  'form': FormLayout(form),
+                                  'tab': 'credentials'}));
 
 
 
 
 @block_guest
 @block_guest

+ 6 - 6
misago/apps/usercp/options/views.py

@@ -4,6 +4,7 @@ from django.utils.translation import ugettext as _
 from misago.decorators import block_guest
 from misago.decorators import block_guest
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
+from misago.shortcuts import render_to_response
 from misago.apps.usercp.options.forms import UserForumOptionsForm
 from misago.apps.usercp.options.forms import UserForumOptionsForm
 from misago.apps.usercp.template import RequestContext
 from misago.apps.usercp.template import RequestContext
 
 
@@ -33,9 +34,8 @@ def options(request):
                                                              'subscribe_reply': request.user.subscribe_reply,
                                                              'subscribe_reply': request.user.subscribe_reply,
                                                              })
                                                              })
 
 
-    return request.theme.render_to_response('usercp/options.html',
-                                            context_instance=RequestContext(request, {
-                                             'message': message,
-                                             'tab': 'options',
-                                             'form': FormLayout(form)
-                                             }));
+    return render_to_response('usercp/options.html',
+                              context_instance=RequestContext(request, {
+                                  'message': message,
+                                  'tab': 'options',
+                                  'form': FormLayout(form)}));

+ 9 - 10
misago/apps/usercp/signature/views.py

@@ -6,6 +6,7 @@ from misago.decorators import block_guest
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.markdown import signature_markdown
 from misago.markdown import signature_markdown
 from misago.messages import Message
 from misago.messages import Message
+from misago.shortcuts import render_to_response
 from misago.apps.usercp.template import RequestContext
 from misago.apps.usercp.template import RequestContext
 from misago.apps.usercp.signature.forms import SignatureForm
 from misago.apps.usercp.signature.forms import SignatureForm
 
 
@@ -15,10 +16,9 @@ def signature(request):
     if not request.acl.usercp.can_use_signature():
     if not request.acl.usercp.can_use_signature():
         return error403(request)
         return error403(request)
     if request.user.signature_ban:
     if request.user.signature_ban:
-        return request.theme.render_to_response('usercp/signature_banned.html',
-                                                context_instance=RequestContext(request, {
-                                                 'tab': 'signature',
-                                                 }));
+        return render_to_response('usercp/signature_banned.html',
+                                  context_instance=RequestContext(request, {
+                                      'tab': 'signature'}));
 
 
     siggy_text = ''
     siggy_text = ''
     message = request.messages.get_message('usercp_signature')
     message = request.messages.get_message('usercp_signature')
@@ -39,9 +39,8 @@ def signature(request):
     else:
     else:
         form = SignatureForm(request=request, initial={'signature': request.user.signature})
         form = SignatureForm(request=request, initial={'signature': request.user.signature})
 
 
-    return request.theme.render_to_response('usercp/signature.html',
-                                            context_instance=RequestContext(request, {
-                                             'message': message,
-                                             'tab': 'signature',
-                                             'form': FormLayout(form),
-                                             }));
+    return render_to_response('usercp/signature.html',
+                              context_instance=RequestContext(request, {
+                                  'message': message,
+                                  'tab': 'signature',
+                                  'form': FormLayout(form)}));

+ 9 - 9
misago/apps/usercp/username/views.py

@@ -9,6 +9,7 @@ from misago.decorators import block_guest
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Alert, User, UsernameChange
 from misago.models import Alert, User, UsernameChange
+from misago.shortcuts import render_to_response
 from misago.utils.translation import ugettext_lazy
 from misago.utils.translation import ugettext_lazy
 from misago.apps.usercp.template import RequestContext
 from misago.apps.usercp.template import RequestContext
 from misago.apps.usercp.username.forms import UsernameChangeForm
 from misago.apps.usercp.username.forms import UsernameChangeForm
@@ -60,12 +61,11 @@ def username(request):
     else:
     else:
         form = UsernameChangeForm(request=request)
         form = UsernameChangeForm(request=request)
 
 
-    return request.theme.render_to_response('usercp/username.html',
-                                            context_instance=RequestContext(request, {
-                                             'message': message,
-                                             'changes_left': changes_left,
-                                             'form': FormLayout(form),
-                                             'next_change': next_change,
-                                             'changes_history': request.user.namechanges.order_by('-date')[:10],
-                                             'tab': 'username',
-                                             }));
+    return render_to_response('usercp/username.html',
+                              context_instance=RequestContext(request, {
+                                  'message': message,
+                                  'changes_left': changes_left,
+                                  'form': FormLayout(form),
+                                  'next_change': next_change,
+                                  'changes_history': request.user.namechanges.order_by('-date')[:10],
+                                  'tab': 'username'}));

+ 10 - 9
misago/apps/watchedthreads/views.py

@@ -9,6 +9,7 @@ from misago.decorators import block_guest
 from misago.forms import Form, FormLayout, FormFields
 from misago.forms import Form, FormLayout, FormFields
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, WatchedThread
 from misago.models import Forum, WatchedThread
+from misago.shortcuts import render_to_response
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
 
 
 @block_guest
 @block_guest
@@ -40,12 +41,12 @@ def watched_threads(request, page=0, new=False):
         threads.append(thread.thread)
         threads.append(thread.thread)
             
             
     # Display page
     # Display page
-    return request.theme.render_to_response('watched.html',
-                                            {
-                                             'items_total': count,
-                                             'pagination': pagination,
-                                             'new': new,
-                                             'threads': threads,
-                                             'message': request.messages.get_message('threads'),
-                                             },
-                                            context_instance=RequestContext(request))
+    return render_to_response('watched.html',
+                              {
+                              'items_total': count,
+                              'pagination': pagination,
+                              'new': new,
+                              'threads': threads,
+                              'message': request.messages.get_message('threads'),
+                              },
+                              context_instance=RequestContext(request))

+ 2 - 1
misago/firewalls.py

@@ -2,6 +2,7 @@ from django.conf import settings
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
 from misago.admin import ADMIN_PATH
 from misago.admin import ADMIN_PATH
 from misago.messages import Message
 from misago.messages import Message
+from misago.template.theme import reset_theme
 from misago.apps.errors import error403, error404
 from misago.apps.errors import error403, error404
 from misago.apps.signin.views import signin
 from misago.apps.signin.views import signin
 
 
@@ -26,7 +27,7 @@ class FirewallAdmin(FirewallForum):
     def process_view(self, request, callback, callback_args, callback_kwargs):
     def process_view(self, request, callback, callback_args, callback_kwargs):
         # Block all crawlers with 403
         # Block all crawlers with 403
         if request.user.is_crawler():
         if request.user.is_crawler():
-            request.theme.reset_theme()
+            reset_theme()
             return error403(request)
             return error403(request)
         else:
         else:
             # If we are not authenticated or not admin, force us to sign in right way
             # If we are not authenticated or not admin, force us to sign in right way

+ 2 - 2
misago/middleware/firewalls.py

@@ -1,6 +1,6 @@
 from django.conf import settings
 from django.conf import settings
 from misago.firewalls import *
 from misago.firewalls import *
-from misago.theme import Theme
+from misago.template.theme import activate_theme
 
 
 class FirewallMiddleware(object):
 class FirewallMiddleware(object):
     firewall_admin = FirewallAdmin()
     firewall_admin = FirewallAdmin()
@@ -9,7 +9,7 @@ class FirewallMiddleware(object):
     def process_request(self, request):
     def process_request(self, request):
         if settings.ADMIN_PATH and self.firewall_admin.behind_firewall(request.path_info):
         if settings.ADMIN_PATH and self.firewall_admin.behind_firewall(request.path_info):
             request.firewall = self.firewall_admin
             request.firewall = self.firewall_admin
-            request.theme.set_theme('admin')
+            activate_theme('admin')
         else:
         else:
             request.firewall = self.firewall_forum
             request.firewall = self.firewall_forum
 
 

+ 1 - 1
misago/middleware/theme.py

@@ -1,7 +1,7 @@
 from urlparse import urlparse
 from urlparse import urlparse
 from django.conf import settings
 from django.conf import settings
 from django.core.cache import cache
 from django.core.cache import cache
-from misago.template.theme import activate_theme, active_theme
+from misago.template.theme import activate_theme
 
 
 class ThemeMiddleware(object):
 class ThemeMiddleware(object):
     def process_request(self, request):
     def process_request(self, request):

+ 8 - 3
misago/models/usermodel.py

@@ -15,6 +15,7 @@ from django.utils import timezone as tz_util
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
 from misago.acl.builder import acl
 from misago.acl.builder import acl
 from misago.signals import delete_user_content, rename_user, sync_user_profile
 from misago.signals import delete_user_content, rename_user, sync_user_profile
+from misago.template.loader import render_to_string
 from misago.utils.avatars import avatar_size
 from misago.utils.avatars import avatar_size
 from misago.utils.strings import random_string, slugify
 from misago.utils.strings import random_string, slugify
 from misago.validators import validate_username, validate_password, validate_email
 from misago.validators import validate_username, validate_password, validate_email
@@ -475,11 +476,15 @@ class User(models.Model):
         return ''
         return ''
 
 
     def email_user(self, request, template, subject, context={}):
     def email_user(self, request, template, subject, context={}):
-        templates = request.theme.get_email_templates(template)
         context = RequestContext(request, context)
         context = RequestContext(request, context)
         context['author'] = context['user']
         context['author'] = context['user']
         context['user'] = self
         context['user'] = self
 
 
+        email_html = render_to_string('_email/%s.html' % template,
+                                      context_instance=context)
+        email_text = render_to_string('_email/%s.txt' % template,
+                                      context_instance=context)
+
         # Set message recipient
         # Set message recipient
         if settings.DEBUG and settings.CATCH_ALL_EMAIL_ADDRESS:
         if settings.DEBUG and settings.CATCH_ALL_EMAIL_ADDRESS:
             recipient = settings.CATCH_ALL_EMAIL_ADDRESS
             recipient = settings.CATCH_ALL_EMAIL_ADDRESS
@@ -487,8 +492,8 @@ class User(models.Model):
             recipient = self.email
             recipient = self.email
 
 
         # Build message and add it to queue
         # Build message and add it to queue
-        email = EmailMultiAlternatives(subject, templates[0].render(context), settings.EMAIL_HOST_USER, [recipient])
-        email.attach_alternative(templates[1].render(context), "text/html")
+        email = EmailMultiAlternatives(subject, email_text, settings.EMAIL_HOST_USER, [recipient])
+        email.attach_alternative(email_html, "text/html")
         request.mails_queue.append(email)
         request.mails_queue.append(email)
 
 
     def get_activation(self):
     def get_activation(self):

+ 3 - 0
misago/settings_base.py

@@ -77,6 +77,9 @@ TEMPLATE_LOADERS = (
     'django_jinja.loaders.FileSystemLoader',
     'django_jinja.loaders.FileSystemLoader',
 )
 )
 
 
+# Template extensions that will cause Jinja2 to be used
+DEFAULT_JINJA2_TEMPLATE_EXTENSION = ('.html', '.txt')
+
 # Context processors
 # Context processors
 TEMPLATE_CONTEXT_PROCESSORS = (
 TEMPLATE_CONTEXT_PROCESSORS = (
     'django.core.context_processors.debug',
     'django.core.context_processors.debug',

+ 1 - 0
misago/shortcuts.py

@@ -2,6 +2,7 @@ from django.shortcuts import (redirect, render as django_render,
                               render_to_response as django_render_to_response)
                               render_to_response as django_render_to_response)
 from misago.template.middlewares import process_context
 from misago.template.middlewares import process_context
 from misago.template.theme import prefix_templates
 from misago.template.theme import prefix_templates
+from misago.utils.views import redirect_message, json_response
 
 
 def render(request, template_name, dictionary=None, **kwargs):
 def render(request, template_name, dictionary=None, **kwargs):
     dictionary = process_context(template_name, dictionary, kwargs.pop('context_instance', None))
     dictionary = process_context(template_name, dictionary, kwargs.pop('context_instance', None))

+ 4 - 0
misago/template/theme.py

@@ -19,6 +19,10 @@ def activate_theme(theme):
     _thread_local.misago_template_mutex = False
     _thread_local.misago_template_mutex = False
 
 
 
 
+def reset_theme():
+    _thread_local.misago_theme = settings.INSTALLED_THEMES[0];
+
+
 def active_theme():
 def active_theme():
     try:
     try:
         return _thread_local.misago_theme
         return _thread_local.misago_theme

+ 0 - 9
misago/utils/views.py

@@ -14,12 +14,3 @@ def json_response(request, json=None, status=200, message=None):
     json.update({'code': status, 'message': unicode(message)})
     json.update({'code': status, 'message': unicode(message)})
     response = json_dumps(json, sort_keys=True,  ensure_ascii=False)
     response = json_dumps(json, sort_keys=True,  ensure_ascii=False)
     return HttpResponse(response, content_type='application/json', status=status)
     return HttpResponse(response, content_type='application/json', status=status)
-
-
-def ajax_response(request, template=None, macro=None, vars=None, json=None, status=200, message=None):
-    html = ''
-    vars = vars or {}    
-    json = json or {}
-    if macro:
-        html = request.theme.macro(template, macro, vars, context_instance=RequestContext(request));
-    return json_response(request, json.update({'html': html}), status, message)