Skip to content

Commit

Permalink
Add missing imports and models to the examples in the template layer …
Browse files Browse the repository at this point in the history
…documentation
  • Loading branch information
sspross committed May 19, 2013
1 parent a7e2835 commit 7264e5c
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 15 deletions.
48 changes: 33 additions & 15 deletions docs/howto/custom-template-tags.txt
Expand Up @@ -300,18 +300,21 @@ Template filter code falls into one of two situations:


.. code-block:: python .. code-block:: python


from django.utils.html import conditional_escape from django import template
from django.utils.safestring import mark_safe from django.utils.html import conditional_escape

from django.utils.safestring import mark_safe
@register.filter(needs_autoescape=True)
def initial_letter_filter(text, autoescape=None): register = template.Library()
first, other = text[0], text[1:]
if autoescape: @register.filter(needs_autoescape=True)
esc = conditional_escape def initial_letter_filter(text, autoescape=None):
else: first, other = text[0], text[1:]
esc = lambda x: x if autoescape:
result = '<strong>%s</strong>%s' % (esc(first), esc(other)) esc = conditional_escape
return mark_safe(result) else:
esc = lambda x: x
result = '<strong>%s</strong>%s' % (esc(first), esc(other))
return mark_safe(result)


The ``needs_autoescape`` flag and the ``autoescape`` keyword argument mean The ``needs_autoescape`` flag and the ``autoescape`` keyword argument mean
that our function will know whether automatic escaping is in effect when the that our function will know whether automatic escaping is in effect when the
Expand Down Expand Up @@ -454,8 +457,9 @@ Continuing the above example, we need to define ``CurrentTimeNode``:


.. code-block:: python .. code-block:: python


from django import template
import datetime import datetime
from django import template

class CurrentTimeNode(template.Node): class CurrentTimeNode(template.Node):
def __init__(self, format_string): def __init__(self, format_string):
self.format_string = format_string self.format_string = format_string
Expand Down Expand Up @@ -498,6 +502,8 @@ The ``__init__`` method for the ``Context`` class takes a parameter called


.. code-block:: python .. code-block:: python


from django.template import Context

def render(self, context): def render(self, context):
# ... # ...
new_context = Context({'var': obj}, autoescape=context.autoescape) new_context = Context({'var': obj}, autoescape=context.autoescape)
Expand Down Expand Up @@ -545,7 +551,10 @@ A naive implementation of ``CycleNode`` might look something like this:


.. code-block:: python .. code-block:: python


class CycleNode(Node): import itertools
from django import template

class CycleNode(template.Node):
def __init__(self, cyclevars): def __init__(self, cyclevars):
self.cycle_iter = itertools.cycle(cyclevars) self.cycle_iter = itertools.cycle(cyclevars)
def render(self, context): def render(self, context):
Expand Down Expand Up @@ -576,7 +585,7 @@ Let's refactor our ``CycleNode`` implementation to use the ``render_context``:


.. code-block:: python .. code-block:: python


class CycleNode(Node): class CycleNode(template.Node):
def __init__(self, cyclevars): def __init__(self, cyclevars):
self.cyclevars = cyclevars self.cyclevars = cyclevars
def render(self, context): def render(self, context):
Expand Down Expand Up @@ -664,6 +673,7 @@ Now your tag should begin to look like this:
.. code-block:: python .. code-block:: python


from django import template from django import template

def do_format_time(parser, token): def do_format_time(parser, token):
try: try:
# split_contents() knows not to split quoted strings. # split_contents() knows not to split quoted strings.
Expand Down Expand Up @@ -722,6 +732,11 @@ Our earlier ``current_time`` function could thus be written like this:


.. code-block:: python .. code-block:: python


import datetime
from django import template

register = template.Library()

def current_time(format_string): def current_time(format_string):
return datetime.datetime.now().strftime(format_string) return datetime.datetime.now().strftime(format_string)


Expand Down Expand Up @@ -965,6 +980,9 @@ outputting it:


.. code-block:: python .. code-block:: python


import datetime
from django import template

class CurrentTimeNode2(template.Node): class CurrentTimeNode2(template.Node):
def __init__(self, format_string): def __init__(self, format_string):
self.format_string = format_string self.format_string = format_string
Expand Down
7 changes: 7 additions & 0 deletions docs/ref/templates/api.txt
Expand Up @@ -286,6 +286,7 @@ fully-populated dictionary to ``Context()``. But you can add and delete items
from a ``Context`` object once it's been instantiated, too, using standard from a ``Context`` object once it's been instantiated, too, using standard
dictionary syntax:: dictionary syntax::


>>> from django.template import Context
>>> c = Context({"foo": "bar"}) >>> c = Context({"foo": "bar"})
>>> c['foo'] >>> c['foo']
'bar' 'bar'
Expand Down Expand Up @@ -397,6 +398,9 @@ Also, you can give ``RequestContext`` a list of additional processors, using the
optional, third positional argument, ``processors``. In this example, the optional, third positional argument, ``processors``. In this example, the
``RequestContext`` instance gets a ``ip_address`` variable:: ``RequestContext`` instance gets a ``ip_address`` variable::


from django.http import HttpResponse
from django.template import RequestContext

def ip_address_processor(request): def ip_address_processor(request):
return {'ip_address': request.META['REMOTE_ADDR']} return {'ip_address': request.META['REMOTE_ADDR']}


Expand All @@ -417,6 +421,9 @@ optional, third positional argument, ``processors``. In this example, the
:func:`~django.shortcuts.render_to_response()`: a ``RequestContext`` :func:`~django.shortcuts.render_to_response()`: a ``RequestContext``
instance. Your code might look like this:: instance. Your code might look like this::


from django.shortcuts import render_to_response
from django.template import RequestContext

def some_view(request): def some_view(request):
# ... # ...
return render_to_response('my_template.html', return render_to_response('my_template.html',
Expand Down

0 comments on commit 7264e5c

Please sign in to comment.