How to set a value of a variable inside a template code? How to set a value of a variable inside a template code? django django

How to set a value of a variable inside a template code?


You can use the with template tag.

{% with name="World" %}     <html><div>Hello {{name}}!</div></html>{% endwith %}


Create a template tag:

The app should contain a templatetags directory, at the same level as models.py, views.py, etc. If this doesn’t already exist, create it - don’t forget the __init__.py file to ensure the directory is treated as a Python package.

Create a file named define_action.py inside of the templatetags directory with the following code:

from django import templateregister = template.Library()@register.simple_tagdef define(val=None):  return val

Note: Development server won’t automatically restart. After adding the templatetags module, you will need to restart your server before you can use the tags or filters in templates.


Then in your template you can assign values to the context like this:

{% load define_action %}{% if item %}   {% define "Edit" as action %}{% else %}   {% define "Create" as action %}{% endif %}Would you like to {{action}} this item?


An alternative way that doesn't require that you put everything in the "with" block is to create a custom tag that adds a new variable to the context. As in:

class SetVarNode(template.Node):    def __init__(self, new_val, var_name):        self.new_val = new_val        self.var_name = var_name    def render(self, context):        context[self.var_name] = self.new_val        return ''import re@register.tagdef setvar(parser,token):    # This version uses a regular expression to parse tag contents.    try:        # Splitting by None == splitting by spaces.        tag_name, arg = token.contents.split(None, 1)    except ValueError:        raise template.TemplateSyntaxError, "%r tag requires arguments" % token.contents.split()[0]    m = re.search(r'(.*?) as (\w+)', arg)    if not m:        raise template.TemplateSyntaxError, "%r tag had invalid arguments" % tag_name    new_val, var_name = m.groups()    if not (new_val[0] == new_val[-1] and new_val[0] in ('"', "'")):        raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name    return SetVarNode(new_val[1:-1], var_name)

This will allow you to write something like this in your template:

{% setvar "a string" as new_template_var %}

Note that most of this was taken from here