Skip to main content

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 or use tox to run the tests using multiple Python and Django versions.

Source

http://github.com/trapeze/fancy_tag

License

fancy_tag is Copyright (c) 2010-2012 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, with support from Trapeze.

Metadata

Release files for fancy_tag 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fancy_tag 0.2.0
File Size Uploaded
fancy_tag-0.2.0.tar.gz 5.7 kB Details

Release files / fancy_tag-0.2.0.tar.gz

Download URL fancy_tag-0.2.0.tar.gz
Size 5.7 kB
Tags Source
SHA-256 checksum
How to use checksums
6a4179f2a2accda2b273bfd86de6f7024cee203043cc9a7c040fe7b306bbe120
BLAKE2b-256 checksum
How to use checksums
f4846c34558546df74f6e23a7480daf670ad87e32303e071745cdd1339004d41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.2.0 This release

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.2

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page