Skip to main content

A replacement for Django's simple_tag decorator.

Project description

Overview

fancy_tag is a template tag decorator designed to replace Django’s built in simple_tag decorator. It’s backwards compatible with simple_tag and adds new calling options like named arguments.

Features

  • Keyword arguments - arguments can be explicitly assigned to parameter specific parameters in the template tag function

  • Variable length arguments - The “*args” and “**kwargs” notation

  • The trailing “as <varname>” to assign the output of the template tag to a variable in the template’s context.

Installation

  1. Add the fancy_tag package to your Python path

  2. Instead of:

    @register.simple_tag
    def some_tag(arg1, arg2):
        return '%s %s' % (arg1, arg2)

    Use:

    @fancy_tag(register)
    def some_tag(arg1, arg2):
        return '%s %s' % (arg1, arg2)

Examples

Keyword Arguments

Python Code:

@fancy_tag(register)
def say_cheese(name, thing_to_say='cheese'):
    return 'Hey, %s! Say %s!' % (name, thing_to_say)

Template Code:

{% say_cheese "Jacob" %} -> "Hey, Jacob! Say Cheese!"
{% say_cheese "Malcolm" thing_to_say="Vegemite" %} -> "Hey Malcolm! Say Vegemite!"

Variable Length Arguments

Python Code:

@fancy_tag(register)
def greet_people(*args):
    return 'Hello, %s' % ', '.join(args)

Template Code:

{% greet_people "Larry" "Darryl" "Darryl" %}

Produces:

Hello, Larry, Darryl, Darryl

Variable Length Keyword Arguments

Python Code:

@fancy_tag(register)
def watch_your_mouth(s, **kwargs):
    for key, value in kwargs.items():
        s = s.replace(key, value)
    return s

Template Code:

{% watch_your_mouth "You damn dirty ape!" "damn"="doggone" "dirty"="handsome" %}

Produces:

You doggone handsome ape!”

Assigning Output To A Variable

Python Code:

@fancy_tag(register)
def now(format_string):
    df = DateFormat(datetime.now())
    return df.format(format_string)

Template Code:

{% now as just_now %}
Oh no, it's already {{ just_now }}!

Produces:

Oh no, it’s already February 20th, 2010!

Accessing the Template Context

Python Code:

@fancy_tag(register, takes_context)
def say_hello_to_user(context, phrase):
    return u'%s, %s!' % (phrase, context['user'])

Template Context:

{'user': 'Tobias'}  # Provided by a template context processor, for example

Template Code:

{% say_hello_to_user "Hallo" %}

Produces:

Hallo, Tobias!

Testing

With Django in your python path, run tests/run_tests.py

Source

http://github.com/trapeze/fancy_tag

License

fancy_tag is Copyright (c) 2010 Sam Bull, Trapeze. It is free software, and may be redistributed under the terms specified in the LICENSE file.

Credits

fancy_tag is maintained by [Sam Bull](sbull@trapeze.com), and is funded by [Trapeze](http://trapeze.com)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fancy_tag-0.1.4.tar.gz (3.7 kB view details)

Uploaded Source

File details

Details for the file fancy_tag-0.1.4.tar.gz.

File metadata

  • Download URL: fancy_tag-0.1.4.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for fancy_tag-0.1.4.tar.gz
Algorithm Hash digest
SHA256 1edf60e3cb3e52fb5414e5bc1f10f5f95e3dbc40bf881b28e42f72462f6e16a2
MD5 f96cd40bb3a7ed45fa3cc2be3893d68a
BLAKE2b-256 39825daa2b655d7511be96f4f153556df590f3b2ff07aa59ac75960965f02a5c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page