Mercurial > public > sg101
view gpp/weblinks/views.py @ 11:cc8eb028def1
Update jquery-ui and theme version that is hosted on google. In preparation for having jquery on every page (?), make it so that the autocomplete plug is using the 'global' jquery, and not the one that came with it. It seems to work okay with jquery 1.3.2.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Tue, 14 Apr 2009 02:35:35 +0000 |
parents | dbd703f7d63a |
children | c0d0779b266f |
line wrap: on
line source
""" Views for the weblinks application. """ import datetime import random from django.shortcuts import render_to_response from django.template import RequestContext from django.contrib import auth from django.http import HttpResponseRedirect from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404 from django.core.urlresolvers import reverse from django.db.models import Q from django.http import Http404 from core.paginator import DiggPaginator from core.functions import email_admins from weblinks.models import Category from weblinks.models import Link from weblinks.models import FlaggedLink from weblinks.forms import SearchForm from weblinks.forms import AddLinkForm ####################################################################### LINKS_PER_PAGE = 10 def create_paginator(links): return DiggPaginator(links, LINKS_PER_PAGE, body=5, tail=3, margin=3, padding=2) ####################################################################### def link_index(request): categories = Category.objects.all() total_links = Link.public_objects.all().count() form = SearchForm() return render_to_response('weblinks/index.html', { 'categories': categories, 'total_links': total_links, 'search_form': form, }, context_instance = RequestContext(request)) ####################################################################### def new_links(request): links = Link.public_objects.order_by('-date_added')[:LINKS_PER_PAGE] return render_to_response('weblinks/link_summary.html', { 'links': links, 'title': 'Newest Links', 'search_form': SearchForm(), }, context_instance = RequestContext(request)) ####################################################################### def popular_links(request): links = Link.public_objects.order_by('-hits')[:LINKS_PER_PAGE] return render_to_response('weblinks/link_summary.html', { 'links': links, 'title': 'Popular Links', 'search_form': SearchForm(), }, context_instance = RequestContext(request)) ####################################################################### @login_required def add_link(request): if request.method == 'POST': add_form = AddLinkForm(request.POST) if add_form.is_valid(): new_link = add_form.save(commit=False) new_link.user = request.user new_link.is_public = False new_link.save() email_admins('New link for approval', """Hello, A user has added a new link for your approval. """) return HttpResponseRedirect(reverse('weblinks.views.add_thanks')) else: add_form = AddLinkForm() return render_to_response('weblinks/add_link.html', { 'search_form': SearchForm(), 'add_form': add_form, }, context_instance = RequestContext(request)) ####################################################################### @login_required def add_thanks(request): return render_to_response('weblinks/add_link.html', { 'search_form': SearchForm(), }, context_instance = RequestContext(request)) ####################################################################### # Maps URL component to database field name for the links table: LINK_FIELD_MAP = { 'title': 'title', 'date': '-date_added', 'hits': '-hits' } def view_links(request, category, sort='title', page='1'): try: cat = Category.objects.get(pk=category) except Category.DoesNotExist: raise Http404 if sort in LINK_FIELD_MAP: order_by = LINK_FIELD_MAP[sort] else: sort = 'title' order_by = LINK_FIELD_MAP['title'] links = Link.public_objects.filter(category = category).order_by(order_by) paginator = create_paginator(links) try: the_page = paginator.page(int(page)) except InvalidPage: raise Http404 return render_to_response('weblinks/view_links.html', { 's' : sort, 'category' : cat, 'page' : the_page, 'search_form': SearchForm(), }, context_instance = RequestContext(request)) ####################################################################### def _visit_link(request, link): link.hits += 1 link.save() return HttpResponseRedirect(link.url) ####################################################################### def visit(request, link_id): link = get_object_or_404(Link, pk = link_id) return _visit_link(request, link) ####################################################################### def random_link(request): ids = Link.public_objects.values_list('id', flat=True) if not ids: raise Http404 id = random.choice(ids) random_link = Link.public_objects.get(pk=id) return _visit_link(request, random_link) ####################################################################### @login_required def report_link(request, link_id): link = get_object_or_404(Link, pk = link_id) if request.method == "POST": FlaggedLink.objects.create(link, request.user) email_admins('A Link Has Been Flagged as Broken', """Hello, A user has flagged a link as broken. """) return HttpResponseRedirect(reverse('weblinks.views.report_thanks', args = (link_id, ))) return render_to_response('weblinks/report_link.html', { 'link': link, 'search_form': SearchForm(), 'report_thanks': False, }, context_instance = RequestContext(request)) ####################################################################### @login_required def report_thanks(request, link_id): link = get_object_or_404(Link, pk = link_id) return render_to_response('weblinks/report_link.html', { 'link': link, 'search_form': SearchForm(), 'report_thanks': True, }, context_instance = RequestContext(request)) ####################################################################### def search_links(request, page=1): if request.method == 'POST': form = SearchForm(request.POST) if form.is_valid(): query_text = form.query() page = 1 else: return HttpResponseRedirect(reverse('weblinks.views.link_index')) else: if 'query' in request.GET: query_text = request.GET['query'] else: return HttpResponseRedirect(reverse('weblinks.views.link_index')) links = Link.public_objects.filter( Q(title__icontains = query_text) | Q(description__icontains = query_text)).order_by('title') paginator = create_paginator(links) try: the_page = paginator.page(int(page)) except EmptyPage: links = Link.public_objects.none() except InvalidPage: raise Http404 return render_to_response('weblinks/search_results.html', { 'query': query_text, 'page': the_page, 'search_form': SearchForm(), }, context_instance = RequestContext(request))