replace render_to; code refactoring

This commit is contained in:
slav0nic 2009-01-21 01:13:46 +02:00
parent ce0222942f
commit e8f277e379
2 changed files with 130 additions and 150 deletions

View file

@ -15,28 +15,41 @@ from django.template.defaultfilters import urlize as django_urlize
from apps.forum import settings as forum_settings
def render_to(template_path):
"""
Expect the dict from view. Render returned dict with
RequestContext.
def render_to(template):
"""
Decorator for Django views that sends returned dict to render_to_response function
with given template and RequestContext as context instance.
def decorator(func):
def wrapper(request, *args, **kwargs):
output = func(request, *args, **kwargs)
if not isinstance(output, dict):
return output
kwargs = {'context_instance': RequestContext(request)}
if 'MIME_TYPE' in output:
kwargs['mimetype'] = output.pop('MIME_TYPE')
if 'TEMPLATE' in output:
template = output.pop('TEMPLATE')
else:
template = template_path
return render_to_response(template, output, **kwargs)
If view doesn't return dict then decorator simply returns output.
Additionally view can return two-tuple, which must contain dict as first
element and string with template name as second. This string will
override template name, given as parameter
Parameters:
- template: template name to use
Examples::
@render_to('some/tmpl.html')
def view(request):
if smth:
return {'context': 'dict'}
else:
return {'context': 'dict'}, 'other/tmpl.html'
2006-2009 Alexander Solovyov, new BSD License
"""
def renderer(func):
def wrapper(request, *args, **kw):
output = func(request, *args, **kw)
if isinstance(output, (list, tuple)):
return render_to_response(output[1], output[0], RequestContext(request))
elif isinstance(output, dict):
return render_to_response(template, output, RequestContext(request))
return output
return wrapper
return decorator
return renderer
def absolute_url(path):
return 'http://%s%s' % (forum_settings.HOST, path)

View file

@ -2,8 +2,7 @@ import math
import re
import datetime
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from django.shortcuts import get_object_or_404
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
@ -48,7 +47,7 @@ def index(request):
'online_count': len(users_online),
'guest_count': guest_count,
'last_user': User.objects.order_by('-date_joined')[0],
}
}
@render_to('forum/moderate.html')
@paged('topics', forum_settings.FORUM_PAGE_SIZE)
@ -63,12 +62,12 @@ def moderate(request, forum_id):
if topic_match:
topic_id = topic_match.group(1)
reverse('move_topic', args=[topic_id])
return HttpResponseRedirect(reverse('index'))
elif 'delete_topics' in request.POST:
for topic in request.POST:
topic_match = re.match('topic_id\[(\d+)\]', reputation)
if topic_match:
topic_id = topic_match.group(1)
topic = get_object_or_404(Topic, pk=topic_id)
@ -78,22 +77,22 @@ def moderate(request, forum_id):
elif 'open_topics' in request.POST:
for topic in request.POST:
topic_match = re.match('topic_id\[(\d+)\]', topic)
if topic_match:
topic_id = topic_match.group(1)
open_topic(request, topic_id)
return HttpResponseRedirect(reverse('index'))
elif 'close_topics' in request.POST:
for topic in request.POST:
topic_match = re.match('topic_id\[(\d+)\]', topic)
if topic_match:
topic_id = topic_match.group(1)
close_topic(request, topic_id)
return HttpResponseRedirect(reverse('index'))
return {'forum': forum,
'topics': topics,
'sticky_topics': forum.topics.filter(sticky=True),
@ -103,62 +102,46 @@ def moderate(request, forum_id):
else:
raise Http404
@render_to('forum/search_topics.html')
def search(request):
if 'action' in request.GET:
if 'show_24h' in request.GET['action']:
action = request.GET['action']
if action == 'show_24h':
date = datetime.datetime.today() - datetime.timedelta(1)
topics = Topic.objects.filter(created__gte=date).order_by('created')
return render_to_response('forum/search_topics.html',
{'topics': topics,
}, RequestContext(request))
elif 'show_new' in request.GET['action']:
elif action == 'show_new':
topics = Topic.objects.all().order_by('created')
topics = [topic for topic in topics if forum_extras.has_unreads(topic, request.user)]
return render_to_response('forum/search_topics.html',
{'topics': topics,
}, RequestContext(request))
elif 'show_unanswered' in request.GET['action']:
elif action == 'show_unanswered':
topics = Topic.objects.filter(post_count=1)
return render_to_response('forum/search_topics.html',
{'topics': topics,
}, RequestContext(request))
elif 'show_subscriptions' in request.GET['action']:
elif action == 'show_subscriptions':
topics = Topic.objects.filter(subscribers=request.user)
return render_to_response('forum/search_topics.html',
{'topics': topics,
}, RequestContext(request))
elif 'show_user' in request.GET['action']:
elif action == 'show_user':
user_id = request.GET['user_id']
posts = Post.objects.filter(user__id=user_id)
topics = [post.topic for post in posts]
return render_to_response('forum/search_topics.html',
{'topics': topics,
}, RequestContext(request))
elif 'search' in request.GET['action']:
elif action == 'search':
posts = Post.objects.all()
form = PostSearchForm(request.GET)
posts = form.filter(posts)
topics = [post.topic for post in posts]
if 'topics' in request.GET['show_as']:
return render_to_response('forum/search_topics.html',
{'topics': topics,
}, RequestContext(request))
if action == 'topics':
return {'topics': topics}
elif 'posts' in request.GET['show_as']:
return render_to_response('forum/search_posts.html',
{'posts': posts,
}, RequestContext(request))
else:
return {'posts': posts}, 'forum/search_posts.html'
return {'topics': topics}
else:
form = PostSearchForm()
return {'categories': Category.objects.all(),
'form': form,
}, 'forum/search_form.html'
return render_to_response('forum/search_form.html',
{'categories': Category.objects.all(),
'form': form,
}, RequestContext(request))
@login_required
@render_to('forum/report.html')
def misc(request):
if 'action' in request.GET:
if 'markread' in request.GET['action']:
action = request.GET['action']
if action =='markread':
for category in Category.objects.all():
for topic in category.topics:
read, new = Read.objects.get_or_create(user=request.user, topic=topic)
@ -167,17 +150,15 @@ def misc(request):
read.save()
return HttpResponseRedirect(reverse('index'))
elif 'report' in request.GET['action']:
if request.GET['post_id']:
elif action == 'report':
if request.GET.get('post_id', ''):
post_id = request.GET['post_id']
post = get_object_or_404(Post, id=post_id)
form = build_form(ReportForm, request, reported_by=request.user, post=post_id)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return HttpResponseRedirect(post.get_absolute_url())
return render_to_response('forum/report.html',
{'form':form,
}, RequestContext(request))
return {'form':form}
elif 'submit' in request.POST and 'mail_to' in request.GET:
form = MailToForm(request.POST)
@ -191,10 +172,9 @@ def misc(request):
elif 'mail_to' in request.GET:
user = get_object_or_404(User, username=request.GET['mail_to'])
form = MailToForm()
return render_to_response('forum/mail_to.html',
{'form':form,
'user': user,
}, RequestContext(request))
return {'form':form,
'user': user,
}, 'forum/mail_to.html'
@render_to('forum/forum.html')
@paged('topics', forum_settings.FORUM_PAGE_SIZE)
@ -292,7 +272,7 @@ def add_post(request, forum_id, topic_id):
'forum': forum,
}
@render_to('forum/user.html')
def user(request, username):
user = get_object_or_404(User, username=username)
if request.user.is_authenticated() and user == request.user or request.user.is_superuser:
@ -307,73 +287,68 @@ def user(request, username):
# #'form': form,
# 'reports': reports,
# }, RequestContext(request))
if 'privacy' in request.GET['section']:
section = request.GET['section']
if section == 'privacy':
form = build_form(PrivacyProfileForm, request, instance=user.forum_profile)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return render_to_response('forum/profile/profile_privacy.html',
{'active_menu':'privacy',
'profile': user,
'form': form,
}, RequestContext(request))
elif 'display' in request.GET['section']:
return {'active_menu':'privacy',
'profile': user,
'form': form,
}, 'forum/profile/profile_privacy.html'
elif section == 'display':
form = build_form(DisplayProfileForm, request, instance=user.forum_profile)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return render_to_response('forum/profile/profile_display.html',
{'active_menu':'display',
'profile': user,
'form': form,
}, RequestContext(request))
elif 'personality' in request.GET['section']:
return {'active_menu':'display',
'profile': user,
'form': form,
}, 'forum/profile/profile_display.html'
elif section == 'personality':
form = build_form(PersonalityProfileForm, request, instance=user.forum_profile)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return render_to_response('forum/profile/profile_personality.html',
{'active_menu':'personality',
'profile': user,
'form': form,
}, RequestContext(request))
elif 'messaging' in request.GET['section']:
return {'active_menu':'personality',
'profile': user,
'form': form,
}, 'forum/profile/profile_personality.html'
elif section == 'messaging':
form = build_form(MessagingProfileForm, request, instance=user.forum_profile)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return render_to_response('forum/profile/profile_messaging.html',
{'active_menu':'messaging',
'profile': user,
'form': form,
}, RequestContext(request))
elif 'personal' in request.GET['section']:
return {'active_menu':'messaging',
'profile': user,
'form': form,
}, 'forum/profile/profile_messaging.html'
elif section == 'personal':
form = build_form(PersonalProfileForm, request, instance=user.forum_profile, user=user)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return render_to_response('forum/profile/profile_personal.html',
{'active_menu':'personal',
'profile': user,
'form': form,
}, RequestContext(request))
elif 'essentials' in request.GET['section']:
return {'active_menu':'personal',
'profile': user,
'form': form,
}, 'forum/profile/profile_personal.html'
elif section == 'essentials':
form = build_form(EssentialsProfileForm, request, instance=user.forum_profile, user=user)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return render_to_response('forum/profile/profile_essentials.html',
{'active_menu':'essentials',
'profile': user,
'form': form,
}, RequestContext(request))
return {'active_menu':'essentials',
'profile': user,
'form': form,
}, 'forum/profile/profile_essentials.html'
elif 'action' in request.GET:
if 'upload_avatar' in request.GET['action']:
action = request.GET['action']
if action == 'upload_avatar':
form = build_form(UploadAvatarForm, request, instance=user.forum_profile)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return HttpResponseRedirect(reverse('forum_profile', args=[user.username]))
return render_to_response('forum/upload_avatar.html',
{'form': form,
'avatar_width': forum_settings.FORUM_AVATAR_WIDTH,
'avatar_height': forum_settings.FORUM_AVATAR_HEIGHT,
}, RequestContext(request))
elif 'delete_avatar' in request.GET['action']:
return {'form': form,
'avatar_width': forum_settings.FORUM_AVATAR_WIDTH,
'avatar_height': forum_settings.FORUM_AVATAR_HEIGHT,
}, 'forum/upload_avatar.html'
elif action == 'delete_avatar':
profile = get_object_or_404(Profile, user=request.user)
profile.avatar = None
profile.save()
@ -381,23 +356,21 @@ def user(request, username):
else:
form = build_form(EssentialsProfileForm, request, instance=user.forum_profile, user=user)
if request.POST and form.is_valid():
if request.method == 'POST' and form.is_valid():
form.save()
return render_to_response('forum/profile/profile_essentials.html',
{'active_menu':'essentials',
'profile': user,
'form': form,
}, RequestContext(request))
return {'active_menu':'essentials',
'profile': user,
'form': form,
}, 'forum/profile/profile_essentials.html'
else:
topic_count = Topic.objects.filter(user=user).count()
return render_to_response('forum/user.html',
{'profile': user,
'topic_count': topic_count,
'reports': reports,
}, RequestContext(request))
return {'profile': user,
'topic_count': topic_count,
'reports': reports,
}
@render_to('forum/reputation.html')
def reputation(request, username):
user = get_object_or_404(User, username=username)
form = build_form(ReputationForm, request, from_user=request.user, to_user=user)
@ -412,13 +385,11 @@ def reputation(request, username):
elif request.GET['action'] == 'minus':
form.fields['sign'].initial = -1
return render_to_response('forum/reputation_form.html',
{'form': form,
}, RequestContext(request))
return {'form': form}, 'forum/reputation_form.html'
else:
raise Http404
elif request.POST:
elif request.method == 'POST':
if 'del_reputation' in request.POST:
for reputation in request.POST:
reputation_match = re.match('reputation_id\[(\d+)\]', reputation)
@ -436,15 +407,13 @@ def reputation(request, username):
return HttpResponseRedirect(topic.get_absolute_url())
else:
raise Http404
else:
reputations = Reputation.objects.filter(to_user=user).order_by('-time').select_related()
return render_to_response('forum/reputation.html',
{'reputations': reputations,
return {'reputations': reputations,
'profile': user.forum_profile,
}, RequestContext(request))
}
def show_post(request, post_id):
post = get_object_or_404(Post, pk=post_id)
@ -452,7 +421,7 @@ def show_post(request, post_id):
page = math.ceil(count / float(forum_settings.TOPIC_PAGE_SIZE))
url = '%s?page=%d#post-%d' % (reverse('topic', args=[post.topic.id]), page, post.id)
return HttpResponseRedirect(url)
@login_required
@render_to('forum/edit_post.html')
def edit_post(request, post_id):
@ -480,7 +449,7 @@ def delete_posts(request, topic_id):
topic = Topic.objects.select_related().get(pk=topic_id)
topic.views += 1
topic.save()
if forum_moderated_by(topic, request.user):
deleted = False
for post in request.POST:
@ -686,7 +655,6 @@ def show_pm(request, pm_id):
'post_user': post_user,
}
@login_required
def delete_subscription(request, topic_id):
topic = get_object_or_404(Topic, pk=topic_id)
@ -696,7 +664,6 @@ def delete_subscription(request, topic_id):
else:
return HttpResponseRedirect(reverse('edit_profile'))
@login_required
def add_subscription(request, topic_id):
topic = get_object_or_404(Topic, pk=topic_id)