hgbook

view web/hgbook/comments/views.py @ 577:61a3f7dacf2f

Fix minor hiccup
author Bryan O'Sullivan <bos@serpentine.com>
date Tue Mar 10 22:27:51 2009 -0700 (2009-03-10)
parents ad304b606163
children
line source
1 import django.forms as forms
2 from django.db import connection
3 from django.http import HttpResponse
4 from hgbook.comments.models import Comment, Element
5 from django.shortcuts import get_object_or_404, render_to_response
6 from django.template import Context
7 from django.template.loader import get_template
8 from django.utils.simplejson import dumps
10 def dump_queries():
11 # requires settings.DEBUG to be set to True in order to work
12 if len(connection.queries) == 1:
13 print connection.queries
14 else:
15 qs = {}
16 for q in connection.queries:
17 qs[q['sql']] = qs.setdefault(q['sql'], 0) + 1
18 for q in sorted(qs.items(), key=lambda x: x[1], reverse=True):
19 print q
20 print len(connection.queries)
22 class CommentForm(forms.Form):
23 id = forms.CharField(widget=forms.HiddenInput)
24 name = forms.CharField(max_length=64)
25 url = forms.URLField(max_length=128, required=False)
26 comment = forms.CharField(widget=forms.Textarea(attrs={
27 'rows': 8, 'cols': 60
28 }))
29 remember = forms.BooleanField(initial=True, required=False)
31 def comments_by_chapter(id):
32 objs = {}
33 for c in Comment.objects.filter(element__chapter=id, hidden=False).order_by('date'):
34 objs.setdefault(c.element_id, []).append(c)
35 return objs
37 def chapter(request, id):
38 template = get_template('comment.html')
39 resp = {}
40 for elt, comments in comments_by_chapter(id).iteritems():
41 form = CommentForm(initial={
42 'id': elt,
43 'name': request.session.get('name', ''),
44 })
45 resp[elt] = template.render(Context({
46 'id': elt,
47 'form': form,
48 'length': len(comments),
49 'query': comments,
50 }))
51 return HttpResponse(dumps(resp), mimetype='application/json')
53 def chapter_count(request, id):
54 resp = comments_by_chapter(id)
55 for elt, comments in resp.iteritems():
56 resp[elt] = len(comments)
57 return HttpResponse(dumps(resp), mimetype='application/json')
59 def single(request, id, form=None, newid=None):
60 queryset = Comment.objects.filter(element=id, hidden=False).order_by('date')
61 if form is None:
62 form = CommentForm(initial={
63 'id': id,
64 'name': request.session.get('name', ''),
65 })
66 try:
67 error = form.errors[0]
68 except:
69 error = ''
70 return render_to_response('comment.html', {
71 'id': id,
72 'form': form,
73 'length': len(queryset),
74 'query': queryset,
75 'newid': newid or True,
76 'error': error,
77 })
79 def submit(request, id):
80 element = get_object_or_404(Element, id=id)
81 form = None
82 newid = None
83 if request.method == 'POST':
84 form = CommentForm(request.POST)
85 if form.is_valid():
86 data = form.cleaned_data
87 if data.get('remember'):
88 request.session['name'] = data['name']
89 request.session['url'] = data['url']
90 else:
91 request.session.pop('name', None)
92 request.session.pop('url', None)
93 c = Comment(element=element,
94 comment=data['comment'],
95 submitter_name=data['name'],
96 submitter_url=data['url'],
97 ip=request.META.get('REMOTE_ADDR'))
98 c.save()
99 newid = c.id
100 form = None
101 return single(request, id, form, newid)