Refs #18651 -- Removed assignment_tag per deprecation timeline.
This commit is contained in:
parent
742d666da5
commit
f032bbc8b1
|
@ -1,9 +1,7 @@
|
|||
import functools
|
||||
import warnings
|
||||
from importlib import import_module
|
||||
|
||||
from django.utils import six
|
||||
from django.utils.deprecation import RemovedInDjango20Warning
|
||||
from django.utils.html import conditional_escape
|
||||
from django.utils.inspect import getargspec
|
||||
from django.utils.itercompat import is_iterable
|
||||
|
@ -136,14 +134,6 @@ class Library(object):
|
|||
else:
|
||||
raise ValueError("Invalid arguments provided to simple_tag")
|
||||
|
||||
def assignment_tag(self, func=None, takes_context=None, name=None):
|
||||
warnings.warn(
|
||||
"assignment_tag() is deprecated. Use simple_tag() instead",
|
||||
RemovedInDjango20Warning,
|
||||
stacklevel=2,
|
||||
)
|
||||
return self.simple_tag(func, takes_context, name)
|
||||
|
||||
def inclusion_tag(self, filename, func=None, takes_context=None, name=None):
|
||||
"""
|
||||
Register a callable as an inclusion tag:
|
||||
|
|
|
@ -629,35 +629,6 @@ positional arguments. For example:
|
|||
|
||||
{% my_tag 123 "abcd" book.title warning=message|lower profile=user.profile %}
|
||||
|
||||
Assignment tags
|
||||
---------------
|
||||
|
||||
.. method:: django.template.Library.assignment_tag()
|
||||
|
||||
.. deprecated:: 1.9
|
||||
|
||||
``simple_tag`` can now store results in a template variable and should
|
||||
be used instead.
|
||||
|
||||
To ease the creation of tags setting a variable in the context, Django provides
|
||||
a helper function, ``assignment_tag``. This function works the same way as
|
||||
:meth:`~django.template.Library.simple_tag` except that it stores the tag's
|
||||
result in a specified context variable instead of directly outputting it.
|
||||
|
||||
Our earlier ``current_time`` function could thus be written like this::
|
||||
|
||||
@register.assignment_tag
|
||||
def get_current_time(format_string):
|
||||
return datetime.datetime.now().strftime(format_string)
|
||||
|
||||
You may then store the result in a template variable using the ``as`` argument
|
||||
followed by the variable name, and output it yourself where you see fit:
|
||||
|
||||
.. code-block:: html+django
|
||||
|
||||
{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %}
|
||||
<p>The time is {{ the_time }}.</p>
|
||||
|
||||
Advanced custom template tags
|
||||
-----------------------------
|
||||
|
||||
|
|
|
@ -938,9 +938,8 @@ define built-in libraries via the ``'builtins'`` key of :setting:`OPTIONS
|
|||
In general, template tags do not autoescape their contents, and this behavior is
|
||||
:ref:`documented <tags-auto-escaping>`. For tags like
|
||||
:class:`~django.template.Library.inclusion_tag`, this is not a problem because
|
||||
the included template will perform autoescaping. For
|
||||
:class:`~django.template.Library.assignment_tag`, the output will be escaped
|
||||
when it is used as a variable in the template.
|
||||
the included template will perform autoescaping. For ``assignment_tag()``,
|
||||
the output will be escaped when it is used as a variable in the template.
|
||||
|
||||
For the intended use cases of :class:`~django.template.Library.simple_tag`,
|
||||
however, it is very easy to end up with incorrect HTML and possibly an XSS
|
||||
|
|
|
@ -241,3 +241,5 @@ these features.
|
|||
is removed.
|
||||
|
||||
* The ``django.forms.extras`` package is removed.
|
||||
|
||||
* The ``assignment_tag`` helper is removed.
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import operator
|
||||
import warnings
|
||||
|
||||
from django import template
|
||||
from django.template.defaultfilters import stringfilter
|
||||
|
@ -168,19 +167,3 @@ def minustwo_overridden_name(value):
|
|||
|
||||
|
||||
register.simple_tag(lambda x: x - 1, name='minusone')
|
||||
|
||||
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter('ignore')
|
||||
|
||||
@register.assignment_tag
|
||||
def assignment_no_params():
|
||||
"""Expected assignment_no_params __doc__"""
|
||||
return "assignment_no_params - Expected result"
|
||||
assignment_no_params.anything = "Expected assignment_no_params __dict__"
|
||||
|
||||
@register.assignment_tag(takes_context=True)
|
||||
def assignment_tag_without_context_parameter(arg):
|
||||
"""Expected assignment_tag_without_context_parameter __doc__"""
|
||||
return "Expected result"
|
||||
assignment_tag_without_context_parameter.anything = "Expected assignment_tag_without_context_parameter __dict__"
|
||||
|
|
|
@ -306,29 +306,6 @@ class InclusionTagTests(TagTestCase):
|
|||
self.assertEqual(template.render(Context({})).strip(), 'one\ntwo')
|
||||
|
||||
|
||||
class AssignmentTagTests(TagTestCase):
|
||||
|
||||
def test_assignment_tags(self):
|
||||
c = Context({'value': 42})
|
||||
|
||||
t = self.engine.from_string('{% load custom %}{% assignment_no_params as var %}The result is: {{ var }}')
|
||||
self.assertEqual(t.render(c), 'The result is: assignment_no_params - Expected result')
|
||||
|
||||
def test_assignment_tag_registration(self):
|
||||
# The decorators preserve the decorated function's docstring, name,
|
||||
# and attributes.
|
||||
self.verify_tag(custom.assignment_no_params, 'assignment_no_params')
|
||||
|
||||
def test_assignment_tag_missing_context(self):
|
||||
# The 'context' parameter must be present when takes_context is True
|
||||
msg = (
|
||||
"'assignment_tag_without_context_parameter' is decorated with "
|
||||
"takes_context=True so it must have a first argument of 'context'"
|
||||
)
|
||||
with self.assertRaisesMessage(TemplateSyntaxError, msg):
|
||||
self.engine.from_string('{% load custom %}{% assignment_tag_without_context_parameter 123 as var %}')
|
||||
|
||||
|
||||
class TemplateTagLoadingTests(SimpleTestCase):
|
||||
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in New Issue