Login

Tag "variables"

Snippet List

Template tag which gets specific GET variables from the current request

This template tag attempts to get specific GET variables from request.GET. If such variables exist, it shows them as a query string (with optional "include_ampersand" mode when it puts an "&" at the end if there is a result string, or a "?" if there's none: it is used when you need to add a new variable to the query string) or as hidden input fields ("html_form" mode).

  • get
  • template-tag
  • request
  • variables
  • get-variables
Read More

Create variables within templates

Here is a Django template tag that allows you to create complex variables specified in JSON format within a template. It enables you to do stuff like: {% var as person %} { "firstName": "John", "lastName": "Smith", "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": 10021 }, "phoneNumbers": [ "212 555-1234", "646 555-4567" ] } {% endvar %} <p>{{person.firstName}}, </br> {{person.address.postalCode}}, </br> {{person.phoneNumbers.1}} </p> This tag also enables me to do dynamic CSS using as follows: # urlpatters urlpatterns = patterns('', (r'^css/(?P<path>.*\.css)$', 'get_css'), ) #views def get_css(request, path): return render_to_response('css/%s' % path, {}, mimetype="text/css; charset=utf-8") # dynamic css within in /path/to/app/templates/css' {% load var %} {% var as col %} { "darkbg": "#999", "lightbg": "#666" } {% endvar %} {% var as dim %} { "thinmargin": "2em", "thickmargin": "10em" } {% endvar %} body { background: {{col.darkbg}}; margin: {{dim.thinmargin}}; }

  • tag
  • json
  • css
  • variables
  • var
Read More

Repeat blocks with new context / simple Jinja-like macro system

A simple macro system that makes it possible to reuse previously defined blocks, optionally with a custom context, similar to the macro functionality in Jinja. It requires some workarounds/hacks because we cannot reach all the data from inside the django template system that we need, but it seems to work pretty well so far. It is, however, also pretty untested at this point, so use at your own risk. Examples: base.html: <!-- This is mandatory if you want to use the repeat-tag in a template. It should as placed as earily as possible. See below for how to mix with template inheritance. --> {% enablemacros %} <!-- Note that {{ param }} does not exist. --> {% block foo %} A standard django block that will be written to the output. {% if param %}{{ param }}{% endif %} {% endblock %} {% macro bar %} Pretty much the same thing as a django block (can even be overridden via template inheritance), but it's content will NOT be rendered per default. Please note that it ends with ENDBLOCK! {% if param %}{{ param }}{% endif %} {% endblock %} <!-- Render foo for the second time --> {% repeat foo %} <!-- Render foo bar the first time --> {% repeat bar %} <!-- Render both blocks again, and pass a parameter --> {% repeat foo with "Hello World" as param %} {% repeat bar with "Hello World" as param %} {% macro form %}do stuff with: {{ form }}{% endblock %} {% for form in all_forms %} {% repeat display %} <!-- will have access to {{ form }} {% endfor %} extend.html: <!-- {% extends %} requires that it be the first thing in a template, and if it is, everything except for block tags is ignored, so {% enablemacros %} won't work. Instead, use: --> {% extends_with_macros 'base.html' %} {% block foo %} Will override "foo" in base.html {% endblock %} {% block bar %} Will override the macro block "bar" in base.html. Whether this is defined as block or macro doesn't matter. {% endblock %} Todo: * This (both tags used) results in infinite recursion: {% extends_with_macros "somefile" %}{% enablemacros %}

  • templates
  • macro
  • jinja
  • repeat
  • reuse
  • variables
Read More

3 snippets posted so far.