예제 #1
0
class CurrentMenuItemNode(Node):
    def __init__(self, path, menu_slug, context_var):
        self.path = Variable(path)
        if menu_slug:
            self.menu_slug = Variable(menu_slug)
        self.context_var = context_var
 
    def render(self, context):
        menu_ids = Menu.objects.all().values_list('id', flat=True)
        if getattr(self, 'menu_slug', None):
            menu_slug = self.menu_slug.resolve(context)
            menu_ids = Menu.objects.filter(slug=menu_slug).values_list(
                'id', flat=True,
                )
        menu_items = MenuItem.objects.filter(
            menu__id__in=menu_ids,
            )
        try:
            current_item = menu_items.current_for_path(
                self.path.resolve(context)
                )
            context[self.context_var] = current_item
        except:
            raise
            pass

        return ''
예제 #2
0
class VersionObjectNode(Node):
    def __init__(self, src, version_prefix, var_name):
        self.var_name = var_name
        self.src = Variable(src)
        if (version_prefix[0] == version_prefix[-1] and version_prefix[0] in ('"', "'")):
            self.version_prefix = version_prefix[1:-1]
        else:
            self.version_prefix = None
            self.version_prefix_var = Variable(version_prefix)
    
    def render(self, context):
        try:
            source = self.src.resolve(context)
        except VariableDoesNotExist:
            return None
        if self.version_prefix:
            version_prefix = self.version_prefix
        else:
            try:
                version_prefix = self.version_prefix_var.resolve(context)
            except VariableDoesNotExist:
                return None
        try:
            version_path = _get_version_path(_url_to_path(source), version_prefix)
            if not os.path.isfile(os.path.join(MEDIA_ROOT, version_path)):
                # create version
                version_path = _version_generator(_url_to_path(source), version_prefix)
            elif os.path.getmtime(os.path.join(MEDIA_ROOT, _url_to_path(source))) > os.path.getmtime(os.path.join(MEDIA_ROOT, version_path)):
                # recreate version if original image was updated
                version_path = _version_generator(_url_to_path(source), version_prefix, force=True)
            context[self.var_name] = FileObject(version_path)
        except:
            context[self.var_name] = ""
        return ''
예제 #3
0
class HasPermNode(Node):
    def __init__(self, user, perm, object=None, context_var=None):
        self.perm = perm
        self.context_var = context_var
        self.user = Variable(user)
        if object:
            self.object = Variable(object)
        else:
            self.object = object

    def render(self, context):
        if not self.user and not self.perm:
            return False

        has_perm = False
        user = self.user.resolve(context)

        if isinstance(user, User):

            # return true for admins
            if user.profile.is_superuser:
                has_perm = True
            else:
                if self.object:
                    object = self.object.resolve(context)
                    has_perm = utils.has_perm(user, self.perm, object)
                else:
                    has_perm = utils.has_perm(user, self.perm)

        if self.context_var:
            context[self.context_var] = has_perm
            return ''
        else:
            return has_perm
예제 #4
0
class ProtocolCounterNode(Node):
    """
    Class for protocol_counter template tag
    """

    #----------------------------------------------------------------------
    def __init__(self, model, team, release, varname):
        """Constructor"""
        
        self.model = get_model(*model.split('.'))
        self.varname = varname
        self.team = Variable(team)
        self.release = Variable(release)

        
    #----------------------------------------------------------------------
    def render(self,context):
        """
        Render the count from the asset model of choice
        """
        try:
            team = self.team.resolve(context)
            release = self.release.resolve(context)
            context[self.varname] = self.model.active.filter(team__exact=team.id,
                                                             release__exact=release.id).count()
        except template.VariableDoesNotExist:
            return ''
        
        return ''
예제 #5
0
파일: tools.py 프로젝트: myrlund/Issues
class TagNode(Node):
    type = Variable('""')
    closed = Variable('""')
    
    def __init__(self, tag, nodelist, title, closed=False, type=None):
        self.tag = tag
        self.title = Variable(title)
        if type:
            self.type = Variable(type)
        if closed:
            self.closed = Variable(closed)
        self.nodelist = nodelist
        
    def render(self, context):
        inner = self.nodelist.render(context)
        t = loader.get_template('issues/core/%s.html' % self.tag)
        if self.closed:
            self.closed = self.closed.resolve(context)
        context = Context({
            'title': self.title.resolve(context),
            'closed': self.closed,
            'type': self.type.resolve(context),
            'inner': inner,
        })
        return t.render(context)
class ImageFromPresetNode(Node):
    def __init__(self, path, preset_name, cast_as=None):
        self.path = Variable(path)
        self.preset_name = Variable(preset_name)
        self.cast_as = cast_as

    def render(self, context):
        try:
            preset_name = str(self.preset_name.resolve(context))
            path = str(self.path.resolve(context))
            if os.path.isabs(path):
                source = path
            else:
                source = os.path.join(settings.MEDIA_ROOT, path)

            image = get_cached_image(preset_name, source)

            if self.cast_as:
                url = u"%s%s%s/%s" % (
                    settings.MEDIA_URL,
                    settings.PRESETS_PREFIX,
                    preset_name,
                    os.path.basename(image.filename).decode("utf-8"),
                )
                width, height = image.size
                context[self.cast_as] = {"url": url, "width": width, "height": height, "file": image.filename}
                return ""
            url = u"%s%s/%s" % (settings.PRESETS_PREFIX, preset_name, os.path.basename(image.filename).decode("utf-8"))
            return url
        except (IOError, OSError), e:
            if not settings.FAIL_SILENTLY:
                raise e
            if self.cast_as:
                context[self.cast_as] = ""
            return ""
예제 #7
0
파일: fb_versions.py 프로젝트: Sergey-L/v2
class VersionNode(Node):
    def __init__(self, src, version_prefix):
        self.src = Variable(src)
        if (version_prefix[0] == version_prefix[-1] and version_prefix[0] in ('"', "'")):
            self.version_prefix = version_prefix[1:-1]
        else:
            self.version_prefix = None
            self.version_prefix_var = Variable(version_prefix)
        
    def render(self, context):
        try:
            source = self.src.resolve(context)
        except VariableDoesNotExist:
            return None
        if self.version_prefix:
            version_prefix = self.version_prefix
        else:
            try:
                version_prefix = self.version_prefix_var.resolve(context)
            except VariableDoesNotExist:
                return None
        try:
            source = force_unicode(source)
            version_path = get_version_path(url_to_path(source), version_prefix)
            if not os.path.isfile(smart_str(os.path.join(MEDIA_ROOT, version_path))):
                # create version
                version_path = version_generator(url_to_path(source), version_prefix)
            elif os.path.getmtime(smart_str(os.path.join(MEDIA_ROOT, url_to_path(source)))) > os.path.getmtime(smart_str(os.path.join(MEDIA_ROOT, version_path))):
                # recreate version if original image was updated
                version_path = version_generator(url_to_path(source), version_prefix, force=True)
            return path_to_url(version_path)
        except:
            return ""
class IsFollowingListNode(Node):
    def __init__(self, var1, var2):
        self.var1 = Variable(var1)
	self.var2 = Variable(var2)
        
    def __repr__(self):
        return "<IsFollowingListNode>"

    def render(self, context):
        try:
            val1 = self.var1.resolve(context)
        except VariableDoesNotExist:
            val1 = None
        try:
            val2 = self.var2.resolve(context)
        except VariableDoesNotExist:
            val2 = None
        
        user_1 = get_object_or_404(User, id=val1)
        user_2 = get_object_or_404(User, id=val2)
        following_2 = isfollowing(user_1,user_2)
	if user_1!=user_2:
	    if not following_2:
		html="<a href=\"/follow/"+user_2.username+"?to_do=follow\" id=\"follow\" > <span class=\"follow_icon\"><img src=\"/images/icons/plus.gif\" /></span> follow </a>"
		return html
	    else:
		html="<span class=\"grey_bg\">you are already following</span>"
		return html
	else:
	    return "yourself"
예제 #9
0
class PlayerScoreNode(template.Node):
    def __init__(self, player_id, game_id, coursehole_id, context_name):
        self.player_id = Variable(player_id)
        self.game_id = Variable(game_id)
        self.coursehole_id = Variable(coursehole_id)
        self.context_name = context_name

    def render(self, context):
        super(PlayerScoreNode, self).render(context)

        try:
            gamehole = GameHole.objects.get(
                game__id=self.game_id.resolve(context),
                coursehole__id=self.coursehole_id.resolve(
                    context),
                player__id=self.player_id.resolve(context),
            )

            context[self.context_name] = gamehole

        except GameHole.DoesNotExist:
            if self.context_name in context:
                del context[self.context_name]

        return ''
예제 #10
0
class Thumbnail(template.Node):
    """
    """
    def __init__(self, width, height, uber_wide):
        self.width = Variable(width)
        self.height = Variable(height)
        self.uber_wide = uber_wide
    
    def render(self, context):
        w = self.width.resolve(context)
        h = self.height.resolve(context)
        dw = w
        dh = h

        context['a'] = [w, h]
        max_h = 200.0
        max_w = 50.0
        if h > max_h:
            w = int((max_h/h) * w)
            h = int(max_h)
        if w > max_w:# and not self.uber_wide:
            dh = int((max_w/w) * h)
            dw = int(max_w)
            
        context['thumbnail_desired_width'] = dw
        context['thumbnail_desired_height'] = dh
        context['thumbnail_width'] = w
        context['thumbnail_height'] = h
        return ""
예제 #11
0
class LazythumbNode(Node):
    usage = 'Expected invocation is {% lazythumb url|ImageFile|Object action geometry as variable %}'

    def __init__(self, parser, token):
        # simple alias
        tse = lambda m: TemplateSyntaxError('lazythumb: %s' % m)
        bits = token.contents.split()
        try:
            _, thing, action, geometry, _, as_var = bits
        except ValueError:
            raise tse(self.usage)

        self.as_var = as_var

        if action not in SUPPORTED_ACTIONS:
            raise tse('supported actions are %s' % SUPPORTED_ACTIONS)
        self.action = action

        self.thing = Variable(thing)
        self.geometry = Variable(geometry)

        self.nodelist = parser.parse(('endlazythumb',))
        parser.delete_first_token()

    def render(self, context):

        thing = self.thing.resolve(context)
        action = self.action
        geometry = self.geometry.resolve(context)

        context.push()
        context[self.as_var] = compute_img(thing, action, geometry)
        output = self.nodelist.render(context)
        context.pop()
        return output
예제 #12
0
class UserCharityDonationsNode(Node):
    """Get all the donations for a user, charity in range."""

    def __init__(self, user, charity, day_range, context_var_name):
        self.user = Variable(user)
        self.charity = Variable(charity)
        self.day_range = day_range
        self.context_var_name = context_var_name

    def render(self, context):
        user = self.user.resolve(context)
        charity = self.charity.resolve(context)
        delta = datetime.now() - timedelta(int(self.day_range))

        donations = Donation.objects.filter(
            user=user,
            charity=charity,
            date__gte=delta,
        )

        total = donations.aggregate(Sum('amount'))['amount__sum']

        context[self.context_var_name] = {
            'donations': donations,
            'total': "%s%s" % (
                user.get_profile().currency,
                total,
            )
        }

        return ''
예제 #13
0
파일: cards.py 프로젝트: zibredlektab/gotti
class CardNode(template.Node):
    def __init__(self, slug, text=None):
        self.slug = Variable(slug)
        self.text = Variable(text) if text else None
        
    def render(self, context):
        slug = self.slug.resolve(context)
        try:
            card = Card.objects.get(slug=slug)
        except Card.DoesNotExist:
            card = None
        text = ""
        if self.text:
            text = self.text.resolve(context)
        if not text and card:
            text = card.name
        if not text:
            text = "{card: %s}" % slug
        if card:
            url = card.get_absolute_url()
        else:
            url = "/admin/cards/card/add/?slug=%s" % slug
        title = "Learn more about %s" % text

        pos = int(context.get('pos', 0))
        if card and card.died and pos > card.died:
            dead_class = ' dead'
        else:
            dead_class = ''

        text = text.replace(" ", "&nbsp;")

        return "<a href='%s' class='cardlink%s' title='%s'>%s</a>" % (url, dead_class, title, text)
예제 #14
0
    def render(self, context):
        import feedparser

        cache_timeout = 300

        if 'cache' in self.kwargs:
            try:
                cache_timeout = Variable(self.kwargs['cache'])
                cache_timeout = cache_timeout.resolve(context)
            except:
                cache_timeout = self.kwargs['cache']

        try:
            url = Variable(self.url)
            url = url.resolve(context)
            self.url = url
        except:
            pass

        cache_key = md5(self.url).hexdigest()
        url_content = cache.get(cache_key)

        if url_content is None:
            url_content = feedparser.parse(self.url)
            # We are going to try to pop out the errors in the
            # feed because they raise an exception that can't be
            # pickled when we try to cache the content.
            if 'bozo_exception' in url_content:
                url_content['bozo_exception'] = ''
            cache.set(cache_key, url_content, int(cache_timeout))

        context[self.context_var] = url_content

        return ''
예제 #15
0
class VersionObjectNode(Node):
    def __init__(self, src, version_prefix, var_name):
        self.var_name = var_name
        self.src = Variable(src)
        if (version_prefix[0] == version_prefix[-1] and version_prefix[0] in ('"', "'")):
            self.version_prefix = version_prefix[1:-1]
        else:
            self.version_prefix = None
            self.version_prefix_var = Variable(version_prefix)
    
    def render(self, context):
        try:
            source = self.src.resolve(context)
        except VariableDoesNotExist:
            return None
        if self.version_prefix:
            version_prefix = self.version_prefix
        else:
            try:
                version_prefix = self.version_prefix_var.resolve(context)
            except VariableDoesNotExist:
                return None
        try:
            source = force_unicode(source)
            version_path = get_version_path(source, version_prefix)
            if not os.path.isfile(version_path):
                version_path = version_generator(source, version_prefix)
            elif os.path.getmtime(source) > os.path.getmtime(version_path):
                version_path = version_generator(source, version_prefix, force=True)
            context[self.var_name] = FileObject(version_path)
        except:
            context[self.var_name] = ""
        return ''
예제 #16
0
class VersionNode(Node):
    def __init__(self, src, version_prefix):
        self.src = Variable(src)
        if (version_prefix[0] == version_prefix[-1] and version_prefix[0] in ('"', "'")):
            self.version_prefix = version_prefix[1:-1]
        else:
            self.version_prefix = None
            self.version_prefix_var = Variable(version_prefix)
        
    def render(self, context):
        try:
            source = self.src.resolve(context)
        except VariableDoesNotExist:
            return None
        if self.version_prefix:
            version_prefix = self.version_prefix
        else:
            try:
                version_prefix = self.version_prefix_var.resolve(context)
            except VariableDoesNotExist:
                return None
        media_root = context.get('media_root', MEDIA_ROOT)
        media_url = context.get('media_url', MEDIA_URL)
        try:
            if isinstance(source, FileObject):
                source = source.path
            source = force_unicode(source)
            version_path = get_version_path(source, version_prefix)
            if not os.path.isfile(version_path):
                version_path = version_generator(source, version_prefix, media_root=media_root)
            elif os.path.getmtime(source) > os.path.getmtime(version_path):
                version_path = version_generator(source, version_prefix, force=True, media_root=media_root)
            return path_to_url(version_path, media_root=media_root, media_url=media_url)
        except:
            return ""
예제 #17
0
파일: extras.py 프로젝트: sebbacon/trevor
class IfInNode(Node): 
    def __init__(self, nodelist_in, nodelist_not_in, element_var, sequence_var): 
        self.nodelist_in = nodelist_in 
        self.nodelist_not_in = nodelist_not_in 
        self.element_var = Variable(element_var) 
        self.sequence_var = Variable(sequence_var) 
 
    def render(self, context): 
        try: 
            element = self.element_var.resolve(context) 
            sequence = self.sequence_var.resolve(context) 
        except VariableDoesNotExist: 
            return self.nodelist_not_in.render(context) 
        if isinstance(sequence, QuerySet): 
            # QuerySets are checked at the database level, 
            # by comparing primary keys 
            if not hasattr(element, 'pk'): 
                return self.nodelist_not_in.render(context) 
            if sequence.filter(pk=element.pk).count() > 0: 
                return self.nodelist_in.render(context) 
            else: 
                return self.nodelist_not_in.render(context) 
        if (element in sequence): 
            return self.nodelist_in.render(context) 
        else: 
            return self.nodelist_not_in.render(context) 
예제 #18
0
class SectionInfoNode(Node):

    def __init__(self, section, current_section=None, counter=0):
        self.section = Variable(section)
        if current_section is not None:
            self.current_section = Variable(current_section)
        else:
            self.current_section = None

    def render(self,context):
        rendered_sect = self.section.resolve(context)
        if self.current_section is not None:
            current_sect = self.current_section.resolve(context)
            current_order = current_sect.order
        else:
            current_order = -1
        req = context.get('request')
        if req is None:
            return "<span class='error'>Called outside of a request context</span>"
        user = req.user

        if _user_can_view(user,rendered_sect) and rendered_sect.order != current_order:
            return """<li>
            <a href='%s' title='%s'>%s</a>
            </li>""" % ( rendered_sect.get_absolute_url(), rendered_sect.title, truncate(rendered_sect.title,28))
        return """<li class="current">
        <span title="%s">%s</span>
       
        </li>""" % ( rendered_sect.title, truncate(rendered_sect.title, 28) )
예제 #19
0
class MDCTNode(Node):
    def __init__(self,var_name,fmt_name=settings.DEFAULT_TIME_FORMAT,
                    tz_var=None):
        self.var_name = Variable(var_name)
        if tz_var is None:
            self.tz_var = None
        else:
            self.tz_var = Variable(tz_var)
        self.fmt_name = fmt_name

    def render(self, context):
        tz_name = settings.DEFAULT_TZ
        if self.tz_var is None:
            user = Variable('user').resolve(context)
            if user.is_authenticated():
                tz_name = user.get_profile().time_zone
        else:
            tz_name = self.tz_var.resolve(context)
            
        dt = self.var_name.resolve(context)
        
        utc = pytz.timezone('UTC')
        tz = pytz.timezone(tz_name)
        dt = utc.localize(dt)
        dt = dt.astimezone(tz)
        return dt.strftime(settings.TIME_FORMATS[self.fmt_name])
예제 #20
0
class PlayerCourseGraphNode(template.Node):
    def __init__(self, player, course):
        self.player = Variable(player)
        self.course = Variable(course)

    def render(self, context):
        super(PlayerCourseGraphNode, self).render(context)
        player = self.player.resolve(context)
        course = self.course.resolve(context)

        # Build a data structure for a players games
        data = {
            'course': course.id,
        }

        results = []

        for game in player.finishedgameplayer_set.filter(
            game__course=course).exclude(dnf=True).order_by('game__started'):
            results.append({
                'score': game.score,
                'game': 'Game %i' % (game.game.id),
            })

        data['results'] = results

        return json.dumps(data)
예제 #21
0
class VersionNode(Node):
    def __init__(self, src, version_prefix):
        self.src = Variable(src)
        if (version_prefix[0] == version_prefix[-1] and version_prefix[0] in ('"', "'")):
            self.version_prefix = version_prefix[1:-1]
        else:
            self.version_prefix = None
            self.version_prefix_var = Variable(version_prefix)

    def render(self, context):
        try:
            source = self.src.resolve(context)
        except VariableDoesNotExist:
            return None
        if self.version_prefix:
            version_prefix = self.version_prefix
        else:
            try:
                version_prefix = self.version_prefix_var.resolve(context)
            except VariableDoesNotExist:
                return None
        try:
            version_path = _get_version_path(str(source), version_prefix)
            if not _exists(version_path):
                # create version
                version_path = _version_generator(str(source), version_prefix)
            elif _last_mod(os.path.join(MEDIA_ROOT, _url_to_path(str(source)))) > _last_mod(os.path.join(MEDIA_ROOT, version_path)):
                # recreate version if original image was updated
                version_path = _version_generator(_url_to_path(str(source)), version_prefix, force=True)
            fo = FileObject(version_path)
            return fo.url_full
        except:
            return ""
예제 #22
0
class FormatQuipQueryNode(Node):    
    def __init__(self, var1, var2):
        self.var1 = Variable(var1)
        self.var2 = Variable(var2)
    def __repr__(self):
        return "<FormatQuipQueryNode>"

    def render(self, context):        
        try:
            val1 = self.var1.resolve(context)
        except VariableDoesNotExist:
            val1 = None
        try:
            val2 = self.var2.resolve(context)
        except VariableDoesNotExist:
            val2 = None
        query = val1
        text = val2
        location = string.find(text.upper(),query.upper())
        if location>40:
            cropped_text = text[location-40:location+40]
            text = "..."+cropped_text+"..."
        else:
            cropped_text = text[:location+40]
            text = cropped_text+"..."
        replacement = '<span class="highlighter">'+query+'</span>'
        data_object = ireplace(text,query,replacement)
        return data_object
예제 #23
0
class ExtendFilesNode(template.Node):
	def __init__(self, type, id, limit):
		self.type = Variable(type)
		self.id = Variable(id)
		self.limit = limit

	def render(self, context):
		try:
			id = self.id.resolve(context)
			type = self.type.resolve(context)
		except VariableDoesNotExist:
			id = None
		if type == 'Project':
			project = Project.objects.get(id = int(id))
			if self.limit != None:
				context['files'] = project.link2project_set.all()[0:int(self.limit)]
			else:
				context['files'] = project.link2project_set.all()
				context['count'] = project.link2project_set.count()
		if type == 'Battery':
			battery = Battery.objects.get(id = int(id))
			if self.limit != None:
				context['files'] = battery.link2battery_set.all()[0:int(self.limit)]
			else:
				context['files'] = battery.link2battery_set.all()
				context['count'] = battery.link2battery_set.count()
		return '' 
예제 #24
0
class YandexMapByAddressNode(Node):
    def __init__(self, address, title, wh):
        self.address = Variable(address)
        self.title = Variable(title)
        self.wh = wh

    def render(self, context):
        if not YANDEXMAPS_API_KEY:
            raise TemplateSyntaxError('YANDEXMAPS_API_KEY is undefined in settings.py')
        address = self.address.resolve(context)
        title = self.title.resolve(context)
        ctx = {
                'map_width':DEFAULT_WIDTH,
                'map_height':DEFAULT_HEIGHT,
                "title":title,
                "address":address,
                "API_KEY":YANDEXMAPS_API_KEY,
                "copyright":Site.objects.get_current().domain,
                }
        if self.wh:
            ctx.update({
                'map_width':self.wh[0],
                'map_height':self.wh[1],
                })
        t = get_template("yandexmaps/map_by_address.html")
        return t.render(Context(ctx))
예제 #25
0
파일: forms_tags.py 프로젝트: kamni/zorna
    def render(self, context):
        kwargs = {}
        try:
            kwargs['q'] = self.q.resolve(context)
        except:
            kwargs['q'] = self.q
        try:
            kwargs['o'] = self.o.resolve(context)
        except:
            kwargs['o'] = self.o
        try:
            kwargs['ot'] = self.ot.resolve(context)
        except:
            kwargs['ot'] = self.ot

        if self.where_field:
            try:
                wf = Variable(self.where_field)
                where_field = wf.resolve(context)
            except Exception as e:
                where_field = self.where_field

            try:
                wd = Variable(self.where_id)
                where_id = wd.resolve(context)
            except Exception as e:
                where_id = self.where_id
            kwargs['where'] = where_field + '.dummy:' + str(where_id)
        cols, rows = forms_get_entries(self.slug, **kwargs)
        context[self.columns] = cols
        context[self.rows] = rows
        return ''
예제 #26
0
파일: data.py 프로젝트: knabar/fynbos
class MetaDataNode(template.Node):

    def __init__(self, record, fieldset):
        self.record = Variable(record)
        self.fieldset = Variable(fieldset) if fieldset else None

    def render(self, context):
        record = self.record.resolve(context)
        fieldvalues = list(record.get_fieldvalues(owner=context['request'].user,
                                                  fieldset=self.fieldset.resolve(context) if self.fieldset else None))
        if fieldvalues:
            fieldvalues[0].subitem = False
        for i in range(1, len(fieldvalues)):
            fieldvalues[i].subitem = (fieldvalues[i].field == fieldvalues[i - 1].field and
                                      fieldvalues[i].group == fieldvalues[i - 1].group and
                                      fieldvalues[i].resolved_label == fieldvalues[i - 1].resolved_label)

        collections = filter_by_access(context['request'].user, record.collection_set.all())

        return render_to_string('data_metadata.html',
                                dict(
                                    values=fieldvalues,
                                    record=record,
                                    collections=collections,
                                ),
                                context_instance=context)
예제 #27
0
class NearbyPages(Node):
    """
    Takes a paginator and calculates the pages surrounding the current
    page number. Useful for creating rich content paginators.

    :param paginator: A paginator object from the Template context.
    :param page_num: The current page number (int)
    :param varname: An optional variable name to use when injecting
        the result into the Template context.
    """
    def __init__(self, paginator, page_num, varname='nearby_pages'):
        self.paginator = Variable(paginator)
        self.page_num = Variable(page_num)
        self.varname = varname

    def render(self, context):
        paginator = self.paginator.resolve(context)
        page_num = self.page_num.resolve(context)

        nearby_pages = [n for n in range(page_num-2, page_num+3) \
                if n > 0 and n <= paginator.num_pages]

        if len(nearby_pages) < 3:
            nearby_pages = None

        # Inject variable into template context
        context[self.varname] = nearby_pages
        return ''
                
예제 #28
0
class GamePlayerScoreNode(template.Node):
    def __init__(self, game, player):
        self.game = Variable(game)
        self.player = Variable(player)

    def render(self, context):
        super(GamePlayerScoreNode, self).render(context)
        game = self.game.resolve(context)
        player = self.player.resolve(context)
        score = 0

        # TODO: Should DNF state be handled here ?
        # Check if we have FinishedGamePlayer and DNF,
        # and return string "DNF"
        try:
            fgp = FinishedGamePlayer.objects.get(
                player=player,
                game=game)

            if fgp.dnf:
                return "DNF"
        except FinishedGamePlayer.DoesNotExist:
            pass

        for gamehole in game.gamehole_set.filter(player=player):
            score_hole = gamehole.throws - \
                gamehole.coursehole.hole.par

            score += score_hole

        return score
예제 #29
0
class MetaDataNode(template.Node):
    def __init__(self, record, fieldset):
        self.record = Variable(record)
        self.fieldset = Variable(fieldset) if fieldset else None

    def render(self, context):
        record = self.record.resolve(context)
        fieldvalues = list(
            record.get_fieldvalues(
                owner=context["request"].user, fieldset=self.fieldset.resolve(context) if self.fieldset else None
            )
        )
        # ensure only the visible fieldvalues get rendered
        fieldvalues = [f for f in fieldvalues if f.field.visible]

        if fieldvalues:
            fieldvalues[0].subitem = False
        for i in range(1, len(fieldvalues)):
            fieldvalues[i].subitem = (
                fieldvalues[i].field == fieldvalues[i - 1].field
                and fieldvalues[i].group == fieldvalues[i - 1].group
                and fieldvalues[i].resolved_label == fieldvalues[i - 1].resolved_label
            )

        return render_to_string("data_metadata.html", dict(values=fieldvalues, record=record), context_instance=context)
class AgencyCountryIndicatorNode(Node):
    def __init__(self, agency, country, out_var):
        self.agency = Variable(agency)
        self.country = Variable(country)
        self.out_var = out_var

    def render(self, context):
        try:
            try:
                agency = self.agency.resolve(context)
            except VariableDoesNotExist:
                raise TemplateSyntaxError('"agencycountryindicators" tag got an unknown variable: %r' % self.agency)

            try:
                country = self.country.resolve(context)
            except VariableDoesNotExist:
                raise TemplateSyntaxError('"agencycountryindicators" tag got an unknown variable: %r' % self.country)

            indicators = calc_agency_country_indicators(agency, country)
            for ind in ["2DPa", "4DP", "5DPa", "5DPb"]:
                (base_val, base_year, latest_val, latest_year), comments = indicators[ind]
                if not base_val in (None, NA_STR) and not latest_val in (None, NA_STR) and base_val != 0:
                    target_val = (latest_val - base_val) / base_val * 100
                    indicators[ind] = ((base_val, base_year, latest_val, latest_year, target_val), comments)

            (base_val, base_year, latest_val, latest_year), comments = indicators["5DPc"]
            if not base_val in (None, NA_STR) and not latest_val in (None, NA_STR) and base_val != 0:
                target_val = (1.0 - (latest_val / float(base_val)))  * 100
                indicators["5DPc"] = ((base_val, base_year, latest_val, latest_year, target_val), comments)
            
            context[self.out_var] = indicators
            return ""
        except:
            traceback.print_exc()
예제 #31
0
class ImagePreviewNode(Node):
    def __init__(self, instance, size, **kwargs):
        # set the context var
        self.instance = Variable(instance)
        self.size = size
        self.context = None

        # get the context vars
        for k, v in kwargs.items():
            if k == 'context':
                self.context = v

    def render(self, context):
        instance = self.instance.resolve(context)

        app_label = instance._meta.app_label
        model = instance._meta.object_name.lower()

        url = reverse('image_preview',
                      args=(app_label, model, instance.id, self.size))
        if not url_exists(url):
            url = None

        if self.context:
            context[self.context] = url
        else:
            context['image_preview'] = url

        return ''
예제 #32
0
class get_story_node(template.Node):

    def __init__(self, story, var_name):
        self.story = Variable(story)
        self.var_name = var_name

    def render(self, context):
        request = context['request']
        s = self.story.resolve(context)
        allowed_objects = get_allowed_objects(
            request.user, ArticleCategory, 'reader')
        mao = get_allowed_objects(
            request.user, ArticleCategory, 'manager')
        stories = ArticleStory.objects.select_related().filter(
            categories__in=allowed_objects, pk=int(s))

        if stories:
            story = stories[0]
            story.current_categories = story.categories.all()
            story.current_category = story.current_categories[0]
            story.url = reverse('view_story', args=[story.current_category.pk, story.pk, story.slug])
            intersect = set(mao).intersection( set([category.pk for category in story.current_categories]))
            if intersect:
                story.edit__url = reverse('edit_story', args=[story.pk])
            context[self.var_name] = story
        else:
            context[self.var_name] = None
        return ''
예제 #33
0
def navigation(context, nav_id):
    """
    Renders the nav and its nav items.
    This will call nav_item that will call itself recursively nesting
    the subnavs
    """
    user = AnonymousUser()

    if 'user' in context:
        if isinstance(context['user'], User):
            user = context['user']

    try:
        nav_id = Variable(nav_id)
        nav_id = nav_id.resolve(context)
    except:
        pass

    try:
        filters = get_query_filters(user, 'navs.view_nav')
        navs = Nav.objects.filter(filters).filter(id=nav_id)
        if user.is_authenticated():
            if not user.profile.is_superuser:
                navs = navs.distinct()
        nav = navs[0]
    except:
        return None
    context.update({
        "nav": nav,
        "items": nav.top_items,
    })
    return context
예제 #34
0
    def render(self, context):
        user = AnonymousUser()

        if 'user' in context:
            if isinstance(context['user'], User):
                user = context['user']

        try:
            pk = Variable(self.pk)
            pk = pk.resolve(context)
        except:
            pk = self.pk

        try:
            filters = get_query_filters(user, 'navs.view_nav')
            nav = Nav.objects.filter(filters).filter(pk=pk)
            if user.is_authenticated():
                if not user.profile.is_superuser:
                    nav = nav.distinct()

            context[self.context_var] = nav[0]
        except:
            pass

        return unicode()
예제 #35
0
class PublicPhotosNode(Node):
    def __init__(self, context_var, user_var=None, use_pool=False):
        self.context_var = context_var
        if user_var is not None:
            self.user_var = Variable(user_var)
        else:
            self.user_var = None
        self.use_pool = use_pool

    def render(self, context):
        use_pool = self.use_pool

        if use_pool:
            queryset = Pool.objects.filter(
                photo__is_public=True, ).select_related("photo")
        else:
            queryset = Image.objects.filter(
                is_public=True).order_by('-date_added')

        if self.user_var is not None:
            user = self.user_var.resolve(context)
            if use_pool:
                queryset = queryset.filter(photo__member=user)
            else:
                queryset = queryset.filter(member=user)

        context[self.context_var] = queryset
        return ""
예제 #36
0
class RelatedNode(Node):
    """
    Main related object node that handles multiple template tags:

    * **get_related_content**
    * **get_related_content_type**
    * **get_relation_type**

    """
    def __init__(self, obj, var_name, content_type=None, relation_type=None):

        self.content_type = content_type
        self.relation_type = relation_type
        self.obj = Variable(obj)
        self.var_name = var_name

    def render(self, context):
        try:
            obj = self.obj.resolve(context)
        except VariableDoesNotExist:
            return ''

        if self.content_type:
            items = obj.get_related_content_type(self.content_type)
        elif self.relation_type:
            items = obj.get_relation_type(self.relation_type)
        else:
            items = obj.storyrelation_set.all()

        context[self.var_name] = items
        return ''
예제 #37
0
파일: shop_tags.py 프로젝트: dokenzy/rakmai
class CategoryNode(template.Node):
    def __init__(self, nodes, roots):
        self.nodes = nodes
        self.roots = Variable(roots)
        self.tree_query_set = None

    def _render_category(self, context, category):
        nodes = []
        context.push()

        for child in category.get_children():
            nodes.append(self._render_category(context, child))

        context['category'] = category
        context['children'] = mark_safe(''.join(nodes))

        rendered = self.nodes.render(context)

        context.pop()
        return rendered

    def render(self, context):
        roots = self.roots.resolve(context)
        nodes = [
            self._render_category(context, category) for category in roots
        ]
        return ''.join(nodes)
예제 #38
0
class WidgetNode(Node):
    """A template tag for rendering a widget with the outer context available.

    This is useful for for instance for using floppyforms with
    django-sekizai."""
    def __init__(self, field):
        self.field = Variable(field)

    def render(self, context):
        field = self.field.resolve(context)

        if callable(getattr(field.field.widget, 'get_context', None)):
            name = field.html_name
            attrs = {'id': field.auto_id}
            value = field.value()
            widget_ctx = field.field.widget.get_context(name, value, attrs)
            template = field.field.widget.template_name
        else:
            widget_ctx = {'field': field}
            template = 'floppyforms/dummy.html'

        template = get_template(context, template)
        context.update(widget_ctx)
        rendered = template.render(context)
        context.pop()
        return rendered

    @classmethod
    def parse(cls, parser, tokens):
        bits = tokens.split_contents()
        if len(bits) != 2:
            raise TemplateSyntaxError(
                "{% widget %} takes one and only one argument")
        field = bits.pop(1)
        return cls(field)
class DisplayActivityFollowUrl(Node):
    def __init__(self, actor, actor_only=True):
        self.actor = Variable(actor)
        self.actor_only = actor_only

    def render(self, context):
        actor_instance = self.actor.resolve(context)
        content_type = ContentType.objects.get_for_model(actor_instance).pk
        if Follow.objects.is_following(context.get('user'), actor_instance):
            return reverse('actstream_unfollow',
                           kwargs={
                               'content_type_id': content_type,
                               'object_id': actor_instance.pk
                           })
        if self.actor_only:
            return reverse('actstream_follow',
                           kwargs={
                               'content_type_id': content_type,
                               'object_id': actor_instance.pk
                           })
        return reverse('actstream_follow_all',
                       kwargs={
                           'content_type_id': content_type,
                           'object_id': actor_instance.pk
                       })
예제 #40
0
    def render(self, context):
        file = self.file.resolve(context)

        if file and file.pk:

            cache_key = generate_image_cache_key(file=str(file.id),
                                                 size=self.size,
                                                 pre_key=FILE_IMAGE_PRE_KEY,
                                                 crop=self.crop,
                                                 unique_key=str(file.id),
                                                 quality=self.quality,
                                                 constrain=self.constrain)
            cached_image_url = cache.get(cache_key)
            if cached_image_url:
                return cached_image_url

            args = [file.pk]
            if self.size:
                try:
                    size = Variable(self.size)
                    size = size.resolve(context)
                except:
                    size = self.size
                args.append(size)
            if self.crop:
                args.append("crop")
            if self.constrain:
                args.append("constrain")
            if self.quality:
                args.append(self.quality)
            url = reverse('file', args=args)
            return url

        # return the default image url
        return static(settings.DEFAULT_IMAGE_URL)
예제 #41
0
    def render(self, context):
        user = AnonymousUser()

        if 'user' in context:
            if isinstance(context['user'], User):
                user = context['user']

        try:
            pk = Variable(self.pk)
            pk = pk.resolve(context)
        except:
            pk = self.pk

        try:
            filters = get_query_filters(user, 'boxes.view_box')
            box = Box.objects.filter(filters).filter(pk=pk)
            if user.is_authenticated():
                if not user.profile.is_superuser:
                    box = box.distinct()
            context['box'] = box[0]
            template = get_template('boxes/edit-link.html')
            output = '<div id="box-%s" class="boxes">%s %s</div>' % (
                box[0].pk,
                box[0].content,
                template.render(context),
            )
            return output
        except:
            return unicode()
예제 #42
0
class SlideShow(template.Node):
    def __init__(self,  images,  image_size,  rendered_template):
        self.images = Variable(images)
        self.image_size = image_size
        self.rendered_template = rendered_template
        
    def render(self,  context):
        try:
            images = self.images.resolve(context)
        except VariableDoesNotExist:
            images = None
            
        counter = 1
        image_objects = []
        for image in images:
            image_object = type('ImageObject',  (object,  ),  {})
            image_object.image = image
            image_object.object = image
            image_object.counter = counter
            image_object.css_id = 'dynamic_lead_' + str(counter)
            counter = counter + 1
            image_objects.append(image_object)
        
        rendered_template = render_to_string(self.rendered_template,  {'images':image_objects},  context)
        return rendered_template
예제 #43
0
class GetXtdCommentTreeNode(Node):
    def __init__(self, obj, var_name, with_feedback):
        self.obj = Variable(obj)
        self.var_name = var_name
        self.with_feedback = with_feedback

    def render(self, context):
        obj = self.obj.resolve(context)
        ctype = ContentType.objects.get_for_model(obj)
        flags_qs = CommentFlag.objects.filter(flag__in=[
            CommentFlag.SUGGEST_REMOVAL, LIKEDIT_FLAG, DISLIKEDIT_FLAG
        ]).prefetch_related('user')
        prefetch = Prefetch('flags', queryset=flags_qs)
        queryset = XtdComment\
            .objects\
            .prefetch_related(prefetch)\
            .filter(
                content_type=ctype,
                object_pk=obj.pk,
                site__pk=get_current_site_id(context.get('request')),
                is_public=True
            )
        dic_list = XtdComment.tree_from_queryset(
            queryset, with_feedback=self.with_feedback, user=context['user'])
        context[self.var_name] = dic_list
        return ''
예제 #44
0
class IfStartsWithNode(Node):
    def __init__(self, string, start_string, nodelist_true, nodelist_false,
                 negate):
        self.start_string, self.string = Variable(start_string), Variable(
            string)
        self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
        self.negate = negate
        self.negate = negate

    def __repr__(self):
        return "<IfStartsWithNode>"

    def render(self, context):
        try:
            string = self.string.resolve(context)
        except VariableDoesNotExist:
            string = None
        try:
            start_string = self.start_string.resolve(context)
        except VariableDoesNotExist:
            start_string = None

        if (self.negate and not string.startswith(start_string)) or (
                not self.negate and string.startswith(start_string)):
            return self.nodelist_true.render(context)
        return self.nodelist_false.render(context)
예제 #45
0
class DynamicLead(template.Node):
    def __init__(self,  images,  image_size,  rendered_template):
        self.images = Variable(images)
        self.image_size = image_size
        self.rendered_template = rendered_template
        
    def render(self,  context):
        try:
            images = self.images.resolve(context)
        except VariableDoesNotExist:
            images = None
            
        counter = 1
        image_objects = []
        for image in images:
            image_object = type('ImageObject',  (object,  ),  {})
            image_object.image = image
            image_object.object = image
            image_object.counter = counter
            image_object.css_id = 'dynamic_lead_' + str(counter)
            if counter == 1:
                image_object.css_class = 'block'
                image_object.style = ''
            else:
                image_object.css_class = 'hidden'
                image_object.style = 'display: none;'
            counter = counter + 1
            image_objects.append(image_object)
        
        rendered_template = render_to_string(self.rendered_template,  {'images':image_objects},  context)
        return rendered_template
예제 #46
0
    class WidgetNode(Node):
        """A template tag for rendering a widget with the outer context available.

        This is useful for for instance for using floppyforms with
        django-sekizai."""
        def __init__(self, field):
            self.field = Variable(field)

        def render(self, context):
            field = self.field.resolve(context)
            renderer = field.form.renderer

            try:
                field.form.renderer = ExtContextTemplates(renderer, context)
                return field.as_widget()
            finally:
                field.form.renderer = renderer

        @classmethod
        def parse(cls, parser, tokens):
            bits = tokens.split_contents()
            if len(bits) != 2:
                raise TemplateSyntaxError(
                    "{% widget %} takes one and only one argument")
            field = bits.pop(1)
            return cls(field)
예제 #47
0
class PrintColumnNode(template.Node):
    def __init__(self, column, row, controller):
        self.column = Variable(column)
        self.row = Variable(row)
        self.controller = Variable(controller)

    def render(self, context):
        try:
            column = self.column.resolve(context)
            row = self.row.resolve(context)
            controller = self.controller.resolve(context)
            col_data = controller.resolve_column_data(column, row)
            return column.print_column(col_data, controller)

        except template.VariableDoesNotExist:
            return ''
예제 #48
0
class PhotoImageURL(Node):
    def __init__(self, photo, *args, **kwargs):
        self.size = kwargs.get("size", "100x100")
        self.crop = kwargs.get("crop", False)
        self.constrain = kwargs.get("constrain", False)
        self.quality = kwargs.get("quality", 90)
        self.photo = Variable(photo)

    def render(self, context):
        photo = self.photo.resolve(context)

        # We can't crop and constrain, so we need
        # to pick one if both are passed
        if self.crop and self.constrain:
            self.constrain = False

        # return empty unicode string
        if not photo.pk:
            return static(settings.DEFAULT_IMAGE_URL)

        cache_key = generate_image_cache_key(file=str(photo.pk), size=self.size, pre_key="photo", crop=self.crop, unique_key=str(photo.pk), quality=self.quality, constrain=self.constrain)
        cached_image_url = cache.get(cache_key)
        if cached_image_url:
            return cached_image_url

        args = [photo.pk, self.size]
        if self.crop:
            args.append("crop")
        if self.constrain:
            args.append("constrain")
        if self.quality:
            args.append(self.quality)
        url = reverse('photo.size', args=args)
        return url
예제 #49
0
class MultiBundleNode(template.Node):

    """Node loading a complete bundle by name."""

    bundle_type_handlers = {
        "javascript": JavascriptNode,
        "css": CssNode,
    }

    def __init__(self, bundle_name_var, **kwargs):
        self.bundle_name_var = Variable(bundle_name_var)

        for attr_name, attr_value in kwargs.items():
            if hasattr(self, attr_name):
                setattr(self, attr_name, attr_value)

    def render(self, context):
        bundle_name = self.bundle_name_var.resolve(context)
        bundle = bundler.get_bundles()[bundle_name]
        type_handler = self.bundle_type_handlers[bundle.type]

        def process_file(file_name):
            return type_handler(self.bundle_name_var,
                                file_name).render(context)

        tags = [process_file(file_name) for file_name in bundle.files]
        return "\n".join(tags)
class GetCommentBoxPropsNode(Node):
    def __init__(self, obj):
        self.obj = Variable(obj)

    def render(self, context):
        obj = self.obj.resolve(context)
        form = CommentSecurityForm(obj)
        ctype = ContentType.objects.get_for_model(obj)
        queryset = XtdComment.objects.filter(content_type=ctype,
                                             object_pk=obj.pk,
                                             site__pk=settings.SITE_ID,
                                             is_public=True)
        ctype_slug = "%s-%s" % (ctype.app_label, ctype.model)
        d = {
            "comment_count": queryset.count(),
            "allow_comments": True,
            "current_user": "******",
            "request_name": False,
            "request_email_address": False,
            "is_authenticated": False,
            "allow_flagging": False,
            "allow_feedback": False,
            "show_feedback": False,
            "can_moderate": False,
            "poll_interval": 2000,
            "feedback_url": reverse("comments-xtd-api-feedback"),
            "delete_url": reverse("comments-delete", args=(0,)),
            "reply_url": reverse("comments-xtd-reply", kwargs={'cid': 0}),
            "flag_url": reverse("comments-flag", args=(0,)),
            "list_url": reverse('comments-xtd-api-list',
                                kwargs={'content_type': ctype_slug,
                                        'object_pk': obj.id}),
            "count_url": reverse('comments-xtd-api-count',
                                 kwargs={'content_type': ctype_slug,
                                         'object_pk': obj.id}),
            "send_url": reverse("comments-xtd-api-create"),
            "form": {
                "content_type": form['content_type'].value(),
                "object_pk": form['object_pk'].value(),
                "timestamp": form['timestamp'].value(),
                "security_hash": form['security_hash'].value()
            }
        }
        user = context.get('user', None)
        try:
            user_is_authenticated = user.is_authenticated()
        except TypeError:  # Django >= 1.11
            user_is_authenticated = user.is_authenticated
        if user and user_is_authenticated:
            d['current_user'] = "******" % (
                user.pk, settings.COMMENTS_XTD_API_USER_REPR(user))
            d['is_authenticated'] = True
            d['can_moderate'] = user.has_perm("django_comments.can_moderate")
            d['request_name'] = True if not len(user.get_full_name()) else False
            d['request_email_address'] = True if not user.email else False
        else:
            d['login_url'] = "/admin/login/"
            d['like_url'] = reverse("comments-xtd-like", args=(0,))
            d['dislike_url'] = reverse("comments-xtd-dislike", args=(0,))
        return json.dumps(d)
예제 #51
0
class TaggedGetRelatedNode(Node):
    def __init__(self, obj, queryset_or_model, context_var, **kwargs):
        self.obj = Variable(obj)
        self.queryset_or_model = queryset_or_model
        self.context_var = context_var
        self.kwargs = kwargs

    def render(self, context):
        try:
            param = get_model(*self.queryset_or_model.split('.'))
        except:
            param = Variable(self.queryset_or_model).resolve(context)

        if param is None:
            raise TemplateSyntaxError(
                _('tagged_get_related tag was given an invalid input: %s') %
                self.queryset_or_model)

        objs = list(
            TaggedItem.objects.get_related(self.obj.resolve(context), param,
                                           **self.kwargs))
        for obj in objs:
            if hasattr(obj, 'status'):
                if obj.status != 2:
                    objs.remove(obj)

        context[self.context_var] = objs
        return ''
예제 #52
0
class CacheNode(Node):
    def __init__(self, nodelist, expire_time_var, fragment_name, vary_on):
        self.nodelist = nodelist
        self.expire_time_var = Variable(expire_time_var)
        self.fragment_name = fragment_name
        self.vary_on = vary_on

    def render(self, context):
        try:
            expire_time = self.expire_time_var.resolve(context)
        except VariableDoesNotExist:
            raise TemplateSyntaxError(
                '"cache" tag got an unknkown variable: %r' %
                self.expire_time_var.var)
        try:
            expire_time = int(expire_time)
        except (ValueError, TypeError):
            raise TemplateSyntaxError(
                '"cache" tag got a non-integer timeout value: %r' %
                expire_time)
        # Build a unicode key for this fragment and all vary-on's.
        cache_key = u':'.join(
            [self.fragment_name] +
            [urlquote(resolve_variable(var, context)) for var in self.vary_on])
        value = cache.get(cache_key)
        if value is None:
            value = self.nodelist.render(context)
            cache.set(cache_key, value, expire_time)
        return value
예제 #53
0
class FlowPlayerNode(Node):
    "Renderer class for the flowplayer template tag."

    def __init__(self, video_url, player_url):
        """
        Constructor.

        Parameters:

            file_url
                Video url.
            player_url
                Flowplayer url.
        """
        self.player_url = player_url
        self.video_url = Variable(video_url)

    def render(self, context):

        try:
            video_url = self.video_url.resolve(context)
        except VariableDoesNotExist:
            video_url = self.video_url

        t = loader.get_template('videoplayer/flowplayer.html')
        code_context = Context(
            {
                "player_url": self.player_url,
                "video_url": video_url,
            },
            autoescape=context.autoescape)
        return t.render(code_context)
예제 #54
0
class TEYearButton(Node):

    DIRECTION_PREVIOUS = 1
    DIRECTION_NEXT = 2

    def __init__(self, year, direction):

        self.direction = direction
        self.year_token = Variable(year)

    def render(self, context):

        year = self.year_token.resolve(context)

        if year:

            if self.direction == self.DIRECTION_PREVIOUS:
                return '<a href="#" onclick="changeYear(%d); return false;" class="left_arrow"></a>&nbsp;' % (
                    year)
            else:
                return '&nbsp;<a href="#" onclick="changeYear(%d); return false;" class="right_arrow"></a>' % (
                    year)

        else:
            return ''
예제 #55
0
    def render(self, context):
        self.filter_expression.var.translate = not self.noop
        if self.message_context:
            self.filter_expression.var.message_context = (
                self.message_context.resolve(context))
        output = self.filter_expression.resolve(context)
        value = render_value_in_context(output, context)
        # Restore percent signs. Percent signs in template text are doubled
        # so they are not interpreted as string format flags.
        is_safe = isinstance(value, SafeData)
        value = value.replace('%%', '%')

        formatvalues = []
        for formatvalue in self.formatvalues:
            try:
                variable = Variable(formatvalue)
                formatvalues.append(variable.resolve(context))
            except VariableDoesNotExist:
                formatvalues.append(formatvalue)

        value = value.format(*formatvalues)

        value = mark_safe(value) if is_safe else value
        if self.asvar:
            context[self.asvar] = value
            return ''
        else:
            return value
예제 #56
0
파일: zorna_tags.py 프로젝트: somair/zorna
class natural_date(template.Node):

    def __init__(self, value, var_name):
        self.var_name = var_name
        self.value = Variable(value)

    def render(self, context):
        """
        For date values that are tomorrow, today or yesterday compared to
        present day returns representing string. Otherwise, returns an empty string.
        """
        value = self.value.resolve(context)
        try:
            value = date(value.year, value.month, value.day)
        except AttributeError:
            # Passed value wasn't a date object
            ret = ''
        except ValueError:
            # Date arguments out of range
            ret = ''
        delta = value - date.today()
        if delta.days == 0:
            ret = 'today'
        elif delta.days == 1:
            ret = 'tomorrow'
        elif delta.days == -1:
            ret = 'yesterday'
        else:
            ret = ''
        context[self.var_name] = ret
        return ''
class DisplayActionShort(Node):
    def __init__(self, action, varname=None):
        self.action = Variable(action)
        self.varname = varname

    def render(self, context):
        action_instance = self.action.resolve(context)
        try:
            action_output = render_to_string(
                ('activity/%(verb)s/action.html' % {
                    'verb': action_instance.verb.replace(' ', '_')
                }), {
                    'hide_actor': True,
                    'action': action_instance
                }, context)
        except TemplateDoesNotExist:
            action_output = render_to_string(('activity/action.html'), {
                'hide_actor': True,
                'action': action_instance
            }, context)
        if self.varname is not None:
            context[self.varname] = action_output
            return ""
        else:
            return action_output
예제 #58
0
class ShowIfCachedNode(Node):
    def __init__(self, key):
        self.key = Variable(key)

    def render(self, context):
        key = self.key.resolve(context)
        return cache.get(key) or ""
class DisplayActionLabel(Node):
    def __init__(self, actor, varname=None):
        self.actor = Variable(actor)
        self.varname = varname

    def render(self, context):
        actor_instance = self.actor.resolve(context)
        try:
            user = Variable("request.user").resolve(context)
        except:
            user = None
        try:
            if user and user == actor_instance.user:
                result = " your "
            else:
                result = " %s's " % (actor_instance.user.get_full_name()
                                     or actor_instance.user.username)
        except ValueError:
            result = ""
        result += actor_instance.get_label()
        if self.varname is not None:
            context[self.varname] = result
            return ""
        else:
            return result
예제 #60
0
class DisplayItemNode(Node):
    def __init__(self, item_var):
        self.item_var = Variable(item_var)

    def render(self, context):
        item = self.item_var.resolve(context)
        return item.display(context)