app/soc/views/simple.py
changeset 122 95d0d954fe0b
parent 119 50d8d58dcd7c
child 123 45d10b6af158
--- a/app/soc/views/simple.py	Fri Aug 29 00:00:34 2008 +0000
+++ b/app/soc/views/simple.py	Fri Aug 29 02:52:02 2008 +0000
@@ -65,6 +65,23 @@
   return response_helpers.respond(request, template, context)
 
 
+def public(request, template, linkname, context):
+  """A convenience wrapper around templateWithLinkName() using 'public.html'.
+
+  Args:
+    request, linkname, context: see templateWithLinkName()
+    template: the "sibling" template (or a search list of such templates)
+      from which to construct the public.html template name (or names)
+
+  Returns:
+    A subclass of django.http.HttpResponse containing the generated page.
+  """
+  return simple.templateWithLinkName(
+      request, linkname=linkname, context=context,
+      template=template_helpers.makeSiblingTemplatesList(
+          template, 'public.html'))
+
+
 DEF_ERROR_TMPL = 'soc/error.html'
 
 def errorResponse(request, error, template, context):
@@ -93,3 +110,37 @@
 
   return response_helpers.respond(request, error_templates, context=context,
                                   response_args=error.response_args)
+
+
+DEF_LOGIN_TMPL = 'soc/login.html'
+DEF_LOGIN_MSG_FMT = 'Please <a href="%(sign_in)s">sign in</a> to continue.'
+
+def requestLogin(request, template, context, login_message_fmt=None):
+  """Displays a login request page with custom message and login link.
+  
+  Args:
+    request: the standard Django HTTP request object
+    template: the "sibling" template (or a search list of such templates)
+      from which to construct the login.html template name (or names)
+    login_message_fmt: a custom message format string used to create a
+      message displayed on the login page; the format string can contain
+      named format specifiers for any of the keys in context, but should at
+      least contain %(sign_in)s
+    context: the context dict supplied to the template, which is modified
+        (so supply a copy if such modification is not acceptable); 
+      login_message: the caller can completely construct the message supplied
+        to the login template in lieu of using login_message_fmt
+  """
+  context = response_helpers.getUniversalContext(request, context=context)
+  
+  # make a list of possible "sibling" templates, then append a default
+  login_templates = template_helpers.makeSiblingTemplatesList(template,
+                                                              'login.html')
+  login_templates.append(DEF_LOGIN_TMPL)
+  
+  if not context.get('login_message'):
+    if not login_message_fmt:
+      login_message_fmt = DEF_LOGIN_MSG_FMT
+    context['login_message'] = login_message_fmt % context  
+  
+  return response_helpers.respond(request, login_templates, context=context)