Optional login/logout tags so browseable API will work without requiring auth views

This commit is contained in:
Tom Christie 2012-09-07 10:20:25 +01:00
parent 215de9af81
commit f1dc9be5fc
3 changed files with 42 additions and 8 deletions

View File

@ -4,6 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
{% load urlize_quoted_links %} {% load urlize_quoted_links %}
{% load add_query_param %} {% load add_query_param %}
{% load optional_login %}
{% load static %} {% load static %}
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
@ -24,10 +25,9 @@
{% block userlinks %} {% block userlinks %}
{% if user.is_active %} {% if user.is_active %}
Welcome, {{ user }}. Welcome, {{ user }}.
<a href='{% url 'djangorestframework:logout' %}?next={{ request.path }}'>Log out</a> {% optional_login %}
{% else %} {% else %}
Anonymous {% optional_logout %}
<a href='{% url 'djangorestframework:login' %}?next={{ request.path }}'>Log in</a>
{% endif %} {% endif %}
{% endblock %} {% endblock %}
</div> </div>

View File

@ -0,0 +1,32 @@
"""
Tags to optionally include the login and logout links, depending on if the
login and logout views are in the urlconf.
"""
from django import template
from django.core.urlresolvers import reverse, NoReverseMatch
register = template.Library()
@register.simple_tag(takes_context=True)
def optional_login(context):
try:
login_url = reverse('djangorestframework:login')
except NoReverseMatch:
return ''
request = context['request']
snippet = "<a href='%s?next=%s'>Log in</a>" % (login_url, request.path)
return snippet
@register.simple_tag(takes_context=True)
def optional_logout(context):
try:
logout_url = reverse('djangorestframework:logout')
except NoReverseMatch:
return ''
request = context['request']
snippet = "<a href='%s?next=%s'>Log out</a>" % (logout_url, request.path)
return snippet

View File

@ -1,17 +1,18 @@
"""Adds the custom filter 'urlize_quoted_links' """
Adds the custom filter 'urlize_quoted_links'
This is identical to the built-in filter 'urlize' with the exception that This is identical to the built-in filter 'urlize' with the exception that
single and double quotes are permitted as leading or trailing punctuation. single and double quotes are permitted as leading or trailing punctuation.
Almost all of this code is copied verbatim from django.utils.html
LEADING_PUNCTUATION and TRAILING_PUNCTUATION have been modified
""" """
# Almost all of this code is copied verbatim from django.utils.html
# LEADING_PUNCTUATION and TRAILING_PUNCTUATION have been modified
import re import re
import string import string
from django.utils.safestring import SafeData, mark_safe from django.utils.safestring import SafeData, mark_safe
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode
from django.utils.http import urlquote
from django.utils.html import escape from django.utils.html import escape
from django import template from django import template
@ -33,6 +34,7 @@ html_gunk_re = re.compile(r'(?:<br clear="all">|<i><\/i>|<b><\/b>|<em><\/em>|<st
hard_coded_bullets_re = re.compile(r'((?:<p>(?:%s).*?[a-zA-Z].*?</p>\s*)+)' % '|'.join([re.escape(x) for x in DOTS]), re.DOTALL) hard_coded_bullets_re = re.compile(r'((?:<p>(?:%s).*?[a-zA-Z].*?</p>\s*)+)' % '|'.join([re.escape(x) for x in DOTS]), re.DOTALL)
trailing_empty_content_re = re.compile(r'(?:<p>(?:&nbsp;|\s|<br \/>)*?</p>\s*)+\Z') trailing_empty_content_re = re.compile(r'(?:<p>(?:&nbsp;|\s|<br \/>)*?</p>\s*)+\Z')
def urlize_quoted_links(text, trim_url_limit=None, nofollow=True, autoescape=True): def urlize_quoted_links(text, trim_url_limit=None, nofollow=True, autoescape=True):
""" """
Converts any URLs in text into clickable links. Converts any URLs in text into clickable links.