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
Add the fancy_tag package to your Python path
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
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
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1edf60e3cb3e52fb5414e5bc1f10f5f95e3dbc40bf881b28e42f72462f6e16a2 |
|
MD5 | f96cd40bb3a7ed45fa3cc2be3893d68a |
|
BLAKE2b-256 | 39825daa2b655d7511be96f4f153556df590f3b2ff07aa59ac75960965f02a5c |