Add new template tag abseventurl

This commit is contained in:
Raphael Michel
2017-03-16 09:58:02 +01:00
parent aed78c2d69
commit 031ed8f3cd

View File

@@ -6,12 +6,15 @@ from django.template.defaulttags import URLNode
from django.utils.encoding import smart_text from django.utils.encoding import smart_text
from django.utils.html import conditional_escape from django.utils.html import conditional_escape
from pretix.multidomain.urlreverse import build_absolute_uri
register = template.Library() register = template.Library()
class EventURLNode(URLNode): class EventURLNode(URLNode):
def __init__(self, event, view_name, kwargs, asvar): def __init__(self, event, view_name, kwargs, asvar, absolute):
self.event = event self.event = event
self.absolute = absolute
super().__init__(view_name, [], kwargs, asvar) super().__init__(view_name, [], kwargs, asvar)
def render(self, context): def render(self, context):
@@ -24,7 +27,10 @@ class EventURLNode(URLNode):
event = self.event.resolve(context) event = self.event.resolve(context)
url = '' url = ''
try: try:
url = eventreverse(event, view_name, kwargs=kwargs) if self.absolute:
url = build_absolute_uri(event, view_name, kwargs=kwargs)
else:
url = eventreverse(event, view_name, kwargs=kwargs)
except NoReverseMatch: except NoReverseMatch:
if self.asvar is None: if self.asvar is None:
raise raise
@@ -39,7 +45,7 @@ class EventURLNode(URLNode):
@register.tag @register.tag
def eventurl(parser, token): def eventurl(parser, token, absolute=False):
""" """
Similar to {% url %} in the same way that eventreverse() is similar to reverse(). Similar to {% url %} in the same way that eventreverse() is similar to reverse().
@@ -68,4 +74,14 @@ def eventurl(parser, token):
else: else:
raise TemplateSyntaxError('Event urls only have keyword arguments.') raise TemplateSyntaxError('Event urls only have keyword arguments.')
return EventURLNode(event, viewname, kwargs, asvar) return EventURLNode(event, viewname, kwargs, asvar, absolute)
@register.tag
def abseventurl(parser, token):
"""
Similar to {% url %} in the same way that eventreverse() is similar to reverse().
Returns an absolute URL.
"""
return eventurl(parser, token, absolute=True)