Source code for allauth.socialaccount.templatetags.socialaccount

from django import template
from django.utils.safestring import mark_safe

from allauth.socialaccount.adapter import get_adapter
from allauth.utils import get_request_param


register = template.Library()


[docs]@register.simple_tag(takes_context=True) def provider_login_url(context, provider, **params): """ {% provider_login_url "facebook" next=bla %} {% provider_login_url "openid" openid="http://me.yahoo.com" next=bla %} """ request = context.get("request") if isinstance(provider, str): adapter = get_adapter() provider = adapter.get_provider(request, provider) query = dict(params) auth_params = query.get("auth_params", None) scope = query.get("scope", None) process = query.get("process", None) if scope == "": del query["scope"] if auth_params == "": del query["auth_params"] if "next" not in query: next = get_request_param(request, "next") if next: query["next"] = next elif process == "redirect": query["next"] = request.get_full_path() else: if not query["next"]: del query["next"] # get the login url and append query as url parameters return provider.get_login_url(request, **query)
@register.simple_tag(takes_context=True) def providers_media_js(context): request = context["request"] providers = get_adapter().list_providers(request) ret = "\n".join(p.media_js(request) for p in providers) return mark_safe(ret) @register.simple_tag def get_social_accounts(user): """ {% get_social_accounts user as accounts %} Then: {{accounts.twitter}} -- a list of connected Twitter accounts {{accounts.twitter.0}} -- the first Twitter account {% if accounts %} -- if there is at least one social account """ accounts = {} for account in user.socialaccount_set.all().iterator(): providers = accounts.setdefault(account.provider, []) providers.append(account) return accounts @register.simple_tag(takes_context=True) def get_providers(context): """ Returns a list of social authentication providers. Usage: `{% get_providers as socialaccount_providers %}`. Then within the template context, `socialaccount_providers` will hold a list of social providers configured for the current site. """ request = context["request"] adapter = get_adapter() providers = adapter.list_providers(request) return sorted(providers, key=lambda p: p.name)