{"id":75291,"date":"2020-01-18T14:12:27","date_gmt":"2020-01-18T08:42:27","guid":{"rendered":"https:\/\/www.vskills.in\/certification\/tutorial\/?p=75291"},"modified":"2024-04-12T14:17:12","modified_gmt":"2024-04-12T08:47:12","slug":"template-inheritance","status":"publish","type":"page","link":"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/","title":{"rendered":"Template Inheritance"},"content":{"rendered":"<p>Our template examples so far have been tiny HTML snippets, but in the real world, you\u2019ll be using Django\u2019s template system to create entire HTML pages. This leads to a common Web development problem: across a Web site, how does one reduce the duplication and redundancy of common page areas, such as site-wide navigation?<\/p>\n<p>A classic way of solving this problem is to use <em>server-side includes<\/em>, directives you can embed within your HTML pages to \u201cinclude\u201d one Web page inside another. Indeed, Django supports that approach, with the {% include %} template tag just described. But the preferred way of solving this problem with Django is to use a more elegant strategy called <em>template inheritance<\/em><em>.<\/em><\/p>\n<p>In essence, template inheritance lets you build a base \u201cskeleton\u201d template that contains all the common parts of your site and defines \u201cblocks\u201d that child templates can override.<\/p>\n<p>Let\u2019s see an example of this by creating a more complete template for our current_datetime view, by editing the current_datetime.html file:<\/p>\n<pre>&lt;!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01\/\/EN\"&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n&nbsp;&nbsp;&nbsp; &lt;title&gt;The current time&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&nbsp;&nbsp;&nbsp; &lt;h1&gt;My helpful timestamp site&lt;\/h1&gt;\n&nbsp;&nbsp;&nbsp; &lt;p&gt;It is now {{ current_date }}.&lt;\/p&gt;\n&nbsp;&nbsp;&nbsp; &lt;hr&gt;\n&nbsp;&nbsp;&nbsp; &lt;p&gt;Thanks for visiting my site.&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n<p>That looks just fine, but what happens when we want to create a template for another view\u2014say, the hours_ahead view from Chapter 3? If we want again to make a nice, valid, full HTML template, we\u2019d create something like:<\/p>\n<pre>&lt;!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01\/\/EN\"&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n&nbsp;&nbsp;&nbsp; &lt;title&gt;Future time&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&nbsp;&nbsp;&nbsp; &lt;h1&gt;My helpful timestamp site&lt;\/h1&gt;\n&nbsp;&nbsp;&nbsp; &lt;p&gt;In {{ hour_offset }} hour(s), it will be {{ next_time }}.&lt;\/p&gt;\n&nbsp;&nbsp;&nbsp; &lt;hr&gt;\n&nbsp;&nbsp;&nbsp; &lt;p&gt;Thanks for visiting my site.&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n<p>Clearly, we\u2019ve just duplicated a lot of HTML. Imagine if we had a more typical site, including a navigation bar, a few style sheets, perhaps some JavaScript\u2014we\u2019d end up putting all sorts of redundant HTML into each template.<\/p>\n<p class=\"VSKILLbodytext\">The server-side include solution to this problem is to factor out the common bits in both templates and save them in separate template snippets, which are then included in each template. Perhaps you\u2019d store the top bit of the template in a file called <span class=\"pre\">header.html<\/span>:<\/p>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">&lt;!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01\/\/EN\"&gt;<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">&lt;html lang=\"en\"&gt;\n&lt;head&gt;\nAnd perhaps you\u2019d store the bottom bit in a file called footer.html:\n&nbsp;&nbsp;&nbsp; &lt;hr&gt;\n&nbsp;&nbsp;&nbsp; &lt;p&gt;Thanks for visiting my site.&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n<p class=\"VSKILLbodytext\">With an include-based strategy, headers and footers are easy. It\u2019s the middle ground that\u2019s messy. In this example, both pages feature a title\u2014 <span class=\"pre\">&lt;h1&gt;My<\/span><tt> <\/tt><span class=\"pre\">helpful<\/span><tt> <\/tt><span class=\"pre\">timestamp<\/span><tt> <\/tt><span class=\"pre\">site&lt;\/h1&gt;<\/span>\u2014but that title can\u2019t fit into <span class=\"pre\">header.html<\/span> because the <span class=\"pre\">&lt;title&gt;<\/span> on both pages is different. If we included the <span class=\"pre\">&lt;h1&gt;<\/span> in the header, we\u2019d have to include the <span class=\"pre\">&lt;title&gt;<\/span>, which wouldn\u2019t allow us to customize it per page. See where this is going?<\/p>\n<p class=\"VSKILLbodytext\"><span style=\"font-size: 6.0pt;\">&nbsp;<\/span>Django\u2019s template inheritance system solves these problems. You can think of it as an \u201cinside-out\u201d version of server-side includes. Instead of defining the snippets that are <em><span style=\"font-family: 'Baskerville Old Face','serif';\">common<\/span><\/em>, you define the snippets that are <em><span style=\"font-family: 'Baskerville Old Face','serif'; font-style: normal;\">different<\/span><\/em><i>.<\/i><\/p>\n<p class=\"VSKILLbodytext\">The first step is to define a <em><span style=\"font-family: 'Baskerville Old Face','serif';\">base template<\/span><\/em>\u2014a skeleton of your page that <em><span style=\"font-family: 'Baskerville Old Face','serif';\">child templates<\/span><\/em> will later fill in. Here\u2019s a base template for our ongoing example:<\/p>\n<pre class=\"VSKILLbodytext\">&lt;!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01\/\/EN\"&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n&nbsp;&nbsp;&nbsp; &lt;title&gt;{% block title %}{% endblock %}&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&nbsp;&nbsp;&nbsp; &lt;h1&gt;My helpful timestamp site&lt;\/h1&gt;\n&nbsp;&nbsp;&nbsp; {% block content %}{% endblock %}\n&nbsp;&nbsp;&nbsp; {% block footer %}\n&nbsp;&nbsp;&nbsp; &lt;hr&gt;\n&nbsp;&nbsp;&nbsp; &lt;p&gt;Thanks for visiting my site.&lt;\/p&gt;\n&nbsp;&nbsp;&nbsp; {% endblock %}\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n<p class=\"VSKILLbodytext\">This template, which we\u2019ll call <span class=\"pre\">base.html<\/span>, defines a simple HTML skeleton document that we\u2019ll use for all the pages on the site.<\/p>\n<p class=\"VSKILLbodytext\">It\u2019s the job of child templates to override, or add to, or leave alone the contents of the blocks. (If you\u2019re following along at home, save this file to your template directory.)<\/p>\n<p class=\"VSKILLbodytext\">We\u2019re using a template tag here that you haven\u2019t seen before: the <span class=\"pre\">{%<\/span><tt> <\/tt><span class=\"pre\">block<\/span><tt> <\/tt><span class=\"pre\">%}<\/span> tag. All the <span class=\"pre\">{%<\/span><tt> <\/tt><span class=\"pre\">block<\/span><tt> <\/tt><span class=\"pre\">%}<\/span> tags do is tell the template engine that a child template may override those portions of the template.<\/p>\n<p class=\"VSKILLbodytext\">Now that we have this base template, we can modify our existing <span class=\"pre\">current_datetime.html<\/span> template to use it:<\/p>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">{% extends \"base.html\" %}<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">{% block title %}The current time{% endblock %}<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">{% block content %}<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">&lt;p&gt;It is now {{ current_date }}.&lt;\/p&gt;<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">{% endblock %}<\/pre>\n<p class=\"VSKILLbodytext\"><span style=\"font-size: 6.0pt;\">&nbsp;<\/span>While we\u2019re at it, let\u2019s create a template for the <span class=\"pre\">hours_ahead<\/span> view from Chapter 3. (If you\u2019re following along with code, we\u2019ll leave it up to you to change <span class=\"pre\">hours_ahead<\/span> to use the template system.) Here\u2019s what that would look like:<\/p>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">{% extends \"base.html\" %}<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">{% block title %}Future time{% endblock %}<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">{% block content %}<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">  &lt;p&gt;In {{ hour_offset }} hour(s), it will be {{ next_time }}.&lt;\/p&gt;<\/pre>\n<pre style=\"margin-left: .25in; tab-stops: .5in;\">{% endblock %}<\/pre>\n<p class=\"VSKILLbodytext\">Isn\u2019t this beautiful? Each template contains only the code that\u2019s <em><span style=\"font-family: 'Baskerville Old Face','serif';\">unique<\/span><\/em> to that template. No redundancy needed. If you need to make a site-wide design change, just make the change to <span class=\"pre\">base.html<\/span>, and all of the other templates will immediately reflect the change.<\/p>\n<p class=\"VSKILLbodytext\">Here\u2019s how it works. When you load the template <span class=\"pre\">current_datetime.html<\/span>, the template engine sees the <span class=\"pre\">{%<\/span><tt> <\/tt><span class=\"pre\">extends<\/span><tt> <\/tt><span class=\"pre\">%}<\/span> tag, noting that this template is a child template. The engine immediately loads the parent template\u2014in this case, <span class=\"pre\">base.html<\/span>.<\/p>\n<p>At that point, the template engine notices the three {% block %} tags in base.html and replaces those blocks with the contents of the child template. So, the title we\u2019ve defined in {% block title %} will be used, as will the {% block content %}.<\/p>\n<p>Note that since the child template doesn\u2019t define the footer block, the template system uses the value from the parent template instead. Content within a {% block %} tag in a parent template is always used as a fallback.<\/p>\n<p>Inheritance doesn\u2019t affect the way the context works, and you can use as many levels of inheritance as needed. One common way of using inheritance is the following three-level approach:<\/p>\n<ul>\n<li>Create a html template that holds the main look and feel of your site. This is the stuff that rarely, if ever, changes.<\/li>\n<li>Create a html template for each \u201csection\u201d of your site (e.g., base_photos.html and base_forum.html). These templates extend base.html and include section-specific styles\/design.<\/li>\n<li>Create individual templates for each type of page, such as a forum page or a photo gallery. These templates extend the appropriate section template.<\/li>\n<\/ul>\n<p>This approach maximizes code reuse and makes it easy to add items to shared areas, such as section-wide navigation. Here are some tips for working with template inheritance:<\/p>\n<ul>\n<li>If you use {% extends %} in a template, it must be the first template tag in that template. Otherwise, template inheritance won\u2019t work.<\/li>\n<li>Generally, the more {% block %} tags in your base templates, the better. Remember, child templates don\u2019t have to define all parent blocks, so you can fill in reasonable defaults in a number of blocks, and then define only the ones you need in the child templates. It\u2019s better to have more hooks than fewer hooks.<\/li>\n<li>If you find yourself duplicating code in a number of templates, it probably means you should move that code to a {% block %} in a parent template.<\/li>\n<li>If you need to get the content of the block from the parent template, the {{ super }} variable will do the trick. This is useful if you want to add to the contents of a parent block instead of completely overriding it.<\/li>\n<li>You may not define multiple {% block %} tags with the same name in the same template. This limitation exists because a block tag works in \u201cboth\u201d directions. That is, a block tag doesn\u2019t just provide a hole to fill, it also defines the content that fills the hole in the <em>parent<\/em>. If there were two similarly named {% block %} tags in a template, that template\u2019s parent wouldn\u2019t know which one of the blocks\u2019 content to use.<\/li>\n<li>The template name you pass to {% extends %} is loaded using the same method that get_template() That is, the template name is appended to your TEMPLATE_DIRS setting.<\/li>\n<li>In most cases, the argument to {% extends %} will be a string, but it can also be a variable, if you don\u2019t know the name of the parent template until runtime. This lets you do some cool, dynamic stuff.<\/li>\n<\/ul>\n\n\n<p><a href=\"https:\/\/www.vskills.in\/certification\/tutorial\/certified-django-developer\/\" target=\"_blank\" rel=\"noreferrer noopener\">Back to Tutorial<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Our template examples so far have been tiny HTML snippets, but in the real world, you\u2019ll be using Django\u2019s template system to create entire HTML pages. This leads to a common Web development problem: across a Web site, how does one reduce the duplication and redundancy of common page areas, such as site-wide navigation? A&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[8655],"tags":[8668],"class_list":["post-75291","page","type-page","status-publish","hentry","category-django-web-development","tag-template-inheritance"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Template Inheritance - Tutorial<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Template Inheritance - Tutorial\" \/>\n<meta property=\"og:description\" content=\"Our template examples so far have been tiny HTML snippets, but in the real world, you\u2019ll be using Django\u2019s template system to create entire HTML pages. This leads to a common Web development problem: across a Web site, how does one reduce the duplication and redundancy of common page areas, such as site-wide navigation? A...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/\" \/>\n<meta property=\"og:site_name\" content=\"Tutorial\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/vskills.in\/\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-12T08:47:12+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/\",\"name\":\"Template Inheritance - Tutorial\",\"isPartOf\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#website\"},\"datePublished\":\"2020-01-18T08:42:27+00:00\",\"dateModified\":\"2024-04-12T08:47:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.vskills.in\/certification\/tutorial\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Template Inheritance\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#website\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/\",\"name\":\"Tutorial\",\"description\":\"Vskills - A initiative in elearning and certification\",\"publisher\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.vskills.in\/certification\/tutorial\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#organization\",\"name\":\"Vskills\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/wp-content\/uploads\/2017\/07\/vskills-min-logo.jpg\",\"contentUrl\":\"https:\/\/www.vskills.in\/certification\/tutorial\/wp-content\/uploads\/2017\/07\/vskills-min-logo.jpg\",\"width\":73,\"height\":55,\"caption\":\"Vskills\"},\"image\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/vskills.in\/\",\"https:\/\/x.com\/vskills_in\",\"https:\/\/www.linkedin.com\/company-beta\/1371554\/\",\"https:\/\/www.youtube.com\/channel\/UCMWnscxPwRF_PqXo9B7q_Tw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Template Inheritance - Tutorial","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/","og_locale":"en_US","og_type":"article","og_title":"Template Inheritance - Tutorial","og_description":"Our template examples so far have been tiny HTML snippets, but in the real world, you\u2019ll be using Django\u2019s template system to create entire HTML pages. This leads to a common Web development problem: across a Web site, how does one reduce the duplication and redundancy of common page areas, such as site-wide navigation? A...","og_url":"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/","og_site_name":"Tutorial","article_publisher":"https:\/\/www.facebook.com\/vskills.in\/","article_modified_time":"2024-04-12T08:47:12+00:00","twitter_misc":{"Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/","url":"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/","name":"Template Inheritance - Tutorial","isPartOf":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#website"},"datePublished":"2020-01-18T08:42:27+00:00","dateModified":"2024-04-12T08:47:12+00:00","breadcrumb":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/template-inheritance\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.vskills.in\/certification\/tutorial\/"},{"@type":"ListItem","position":2,"name":"Template Inheritance"}]},{"@type":"WebSite","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#website","url":"https:\/\/www.vskills.in\/certification\/tutorial\/","name":"Tutorial","description":"Vskills - A initiative in elearning and certification","publisher":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.vskills.in\/certification\/tutorial\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#organization","name":"Vskills","url":"https:\/\/www.vskills.in\/certification\/tutorial\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#\/schema\/logo\/image\/","url":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-content\/uploads\/2017\/07\/vskills-min-logo.jpg","contentUrl":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-content\/uploads\/2017\/07\/vskills-min-logo.jpg","width":73,"height":55,"caption":"Vskills"},"image":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/vskills.in\/","https:\/\/x.com\/vskills_in","https:\/\/www.linkedin.com\/company-beta\/1371554\/","https:\/\/www.youtube.com\/channel\/UCMWnscxPwRF_PqXo9B7q_Tw"]}]}},"_links":{"self":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages\/75291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/comments?post=75291"}],"version-history":[{"count":4,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages\/75291\/revisions"}],"predecessor-version":[{"id":83335,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages\/75291\/revisions\/83335"}],"wp:attachment":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/media?parent=75291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/categories?post=75291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/tags?post=75291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}