{"id":75860,"date":"2020-01-20T12:23:25","date_gmt":"2020-01-20T06:53:25","guid":{"rendered":"https:\/\/www.vskills.in\/certification\/tutorial\/?p=75860"},"modified":"2024-04-12T14:17:40","modified_gmt":"2024-04-12T08:47:40","slug":"sites","status":"publish","type":"page","link":"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/","title":{"rendered":"Sites"},"content":{"rendered":"<p>Django\u2019s sites system is a generic framework that lets you operate multiple Web sites from the same database and Django project. This is an abstract concept, and it can be tricky to understand, so we\u2019ll start with a couple of scenarios where it would be useful.<\/p>\n<p><strong>Scenario 1: Reusing Data on Multiple Sites<\/strong> &#8211; As we explained in earlier chapter, the Django-powered sites LJWorld.com and Lawrence.com are operated by the same news organization: the Lawrence Journal-World newspaper in Lawrence, Kansas. LJWorld.com focuses on news, while Lawrence.com focuses on local entertainment. But sometimes editors want to publish an article on both sites.<\/p>\n<p>The brain-dead way of solving the problem would be to use a separate database for each site and to require site producers to publish the same story twice: once for LJWorld.com and again for Lawrence.com. But that\u2019s inefficient for site producers, and it\u2019s redundant to store multiple copies of the same story in the database. The better solution? Both sites use the same article database, and an article is associated with one or more sites via a many-to-many relationship. The Django sites framework provides the database table to which articles can be related. It\u2019s a hook for associating data with one or more \u201csites.\u201d<\/p>\n<p><strong>Scenario 2: Storing Your Site Name\/Domain in One Place<\/strong> &#8211; LJWorld.com and Lawrence.com both have e-mail alert functionality, which lets readers sign up to get notifications when news happens. It\u2019s pretty basic: a reader signs up on a Web form, and he immediately gets an e-mail saying, \u201cThanks for your subscription.\u201d<\/p>\n<p>It would be inefficient and redundant to implement this signup-processing code twice, so the sites use the same code behind the scenes. But the \u201cThank you for your subscription\u201d notice needs to be different for each site. By using Site objects, we can abstract the thank-you notice to use the values of the current site\u2019s name (e.g., &#8216;LJWorld.com&#8217;) and domain (e.g., &#8216;www.ljworld.com&#8217;). The Django sites framework provides a place for you to store the name and domain for each site in your Django project, which means you can reuse those values in a generic way.<\/p>\n<p><strong>How to Use the Sites Framework<\/strong> &#8211; The sites framework is more a series of conventions than a framework. The whole thing is based on two simple concepts:<\/p>\n<ul>\n<li>&nbsp;The Site model, found in django.contrib.sites, has domain and name fields.<\/li>\n<li>The SITE_ID setting specifies the database ID of the Site object associated with that particular settings file.<\/li>\n<\/ul>\n<p>How you use these two concepts is up to you, but Django uses them in a couple of ways automatically via simple conventions. To install the sites application, follow these steps:<\/p>\n<ul>\n<li>Add &#8216;django.contrib.sites&#8217; to your INSTALLED_APPS.<\/li>\n<li>Run the command manage.py syncdb to install the django_site table into your database.<\/li>\n<li>Add one or more Site objects, either through the Django admin site or via the Python API. Create a Site object for each site\/domain that this Django project powers.<\/li>\n<li>Define the SITE_ID setting in each of your settings files. This value should be the database ID of the Site object for the site powered by that settings file.<\/li>\n<\/ul>\n<p><strong>The Sites Framework\u2019s Capabilities<\/strong> &#8211; The sections that follow describe the various things you can do with the sites framework.<\/p>\n<p><strong>Reusing Data on Multiple Sites<\/strong> &#8211; To reuse data on multiple sites, as explained in the first scenario, just create a ManyToManyField to Site in your models, for example:<\/p>\n<p>from django.db import models<br>\nfrom django.contrib.sites.models import Site<br>\nclass Article(models.Model):<br>\nheadline = models.CharField(maxlength=200)<br>\n# &#8230;<br>\nsites = models.ManyToManyField(Site)<\/p>\n<p>That\u2019s the infrastructure you need to associate articles with multiple sites in your database. With that in place, you can reuse the same Django view code for multiple sites. Continuing the Article model example, here\u2019s what an article_detail view might look like:<\/p>\n<p>from django.conf import settings<br>\ndef article_detail(request, article_id):<br>\ntry:<br>\na = Article.objects.get(id=article_id, sites__id=settings.SITE_ID)<br>\nexcept Article.DoesNotExist:<br>\nraise Http404<br>\n# &#8230;<\/p>\n<p>This view function is reusable because it checks the article\u2019s site dynamically, according to the value of the SITE_ID setting. For example, say LJWorld.com\u2019s settings file has a SITE_ID set to 1, and Lawrence.com\u2019s settings file has a SITE_ID set to 2. If this view is called when LJWorld.com\u2019s settings file is active, then it will limit the article lookup to articles in which the list of sites includes LJWorld.com.<\/p>\n<p><strong>Associating Content with a Single Site<\/strong> &#8211; Similarly, you can associate a model to the Site model in a many-to-one relationship using ForeignKey. For example, if an article is allowed on only a single site, you could use a model like this:<\/p>\n<p>from django.db import models<br>\nfrom django.contrib.sites.models import Site<br>\nclass Article(models.Model):<br>\nheadline = models.CharField(maxlength=200)<br>\n# &#8230;<br>\nsite = models.ForeignKey(Site)<\/p>\n<p>This has the same benefits as described in the last section.<\/p>\n<p>Hooking Into the Current Site from Views &#8211; On a lower level, you can use the sites framework in your Django views to do particular things based on the site in which the view is being called, for example:<\/p>\n<p>from django.conf import settings<\/p>\n<p>def my_view(request):<br>\nif settings.SITE_ID == 3:<br>\n# Do something.<br>\nelse:<br>\n# Do something else.<\/p>\n<p>Of course, it\u2019s ugly to hard-code the site IDs like that. A slightly cleaner way of accomplishing the same thing is to check the current site\u2019s domain:<\/p>\n<p>from django.conf import settings<br>\nfrom django.contrib.sites.models import Site<\/p>\n<p>def my_view(request):<br>\ncurrent_site = Site.objects.get(id=settings.SITE_ID)<br>\nif current_site.domain == &#8216;foo.com&#8217;:<br>\n# Do something<br>\nelse:<br>\n# Do something else.<\/p>\n<p>The idiom of retrieving the Site object for the value of settings.SITE_ID is quite common, so the Site model\u2019s manager (Site.objects) has a get_current() method. This example is equivalent to the previous one:<\/p>\n<p>from django.contrib.sites.models import Site<br>\ndef my_view(request):<br>\ncurrent_site = Site.objects.get_current()<br>\nif current_site.domain == &#8216;foo.com&#8217;:<br>\n# Do something<br>\nelse:<br>\n# Do something else.<\/p>\n<p>Note &#8211; In this final example, you don\u2019t have to import django.conf.settings.<\/p>\n<p><strong>Getting the Current Domain for Display<\/strong> &#8211; For a DRY (Don\u2019t Repeat Yourself) approach to storing your site\u2019s name and domain name, as explained in \u201cScenario 2: Storing Your Site Name\/Domain in One Place,\u201d just reference the name and domain of the current Site object. For example:<\/p>\n<p>from django.contrib.sites.models import Site<br>\nfrom django.core.mail import send_mail<\/p>\n<p>def register_for_newsletter(request):<br>\n# Check form values, etc., and subscribe the user.<br>\n# &#8230;<br>\ncurrent_site = Site.objects.get_current()<br>\nsend_mail(&#8216;Thanks for subscribing to %s alerts&#8217; % current_site.name,<br>\n&#8216;Thanks for your subscription. We appreciate it.\\n\\n-The %s team.&#8217; % current_site.name,<br>\n&#8216;editor@%s&#8217; % current_site.domain,<br>\n[user_email])<br>\n# &#8230;<br>\nContinuing our ongoing example of LJWorld.com and Lawrence.com, on Lawrence.com this e-mail has the subject line \u201cThanks for subscribing to lawrence.com alerts.\u201d On LJWorld.com, the e-mail has the subject line \u201cThanks for subscribing to LJWorld.com alerts.\u201d This same site-specific behavior is applied to the e-mails\u2019 message body.<\/p>\n<p>An even more flexible (but more heavyweight) way of doing this would be to use Django\u2019s template system. Assuming Lawrence.com and LJWorld.com have different template directories (TEMPLATE_DIRS), you could simply delegate to the template system like so:<\/p>\n<p>from django.core.mail import send_mail<br>\nfrom django.template import loader, Context<\/p>\n<p>def register_for_newsletter(request):<br>\n# Check form values, etc., and subscribe the user.<br>\n# &#8230;<br>\nsubject = loader.get_template(&#8216;alerts\/subject.txt&#8217;).render(Context({}))<br>\nmessage = loader.get_template(&#8216;alerts\/message.txt&#8217;).render(Context({}))<br>\nsend_mail(subject, message, &#8216;do-not-reply@example.com&#8217;, [user_email])<br>\n# &#8230;<\/p>\n<p>In this case, you have to create subject.txt and message.txt templates in both the LJWorld.com and Lawrence.com template directories. As mentioned previously, that gives you more flexibility, but it\u2019s also more complex. It\u2019s a good idea to exploit the Site objects as much as possible to remove unneeded complexity and redundancy.<\/p>\n<p><strong>Getting the Current Domain for Full URLs<\/strong> &#8211; Django\u2019s get_absolute_url() convention is nice for getting your objects\u2019 URLs without the domain name, but in some cases you might want to display the full URL \u2014 with http:\/\/ and the domain and everything \u2014 for an object. To do this, you can use the sites framework. Here\u2019s a simple example:<\/p>\n<p>&gt;&gt;&gt; from django.contrib.sites.models import Site<br>\n&gt;&gt;&gt; obj = MyModel.objects.get(id=3)<br>\n&gt;&gt;&gt; obj.get_absolute_url()<br>\n&#8216;\/mymodel\/objects\/3\/&#8217;<br>\n&gt;&gt;&gt; Site.objects.get_current().domain<br>\n&#8216;example.com&#8217;<br>\n&gt;&gt;&gt; &#8216;http:\/\/%s%s&#8217; % (Site.objects.get_current().domain, obj.get_absolute_url())<br>\n&#8216;http:\/\/example.com\/mymodel\/objects\/3\/&#8217;<\/p>\n<p><strong>CurrentSiteManager<\/strong> &#8211; If Site&#8220;s play a key role in your application, consider using the helpful &#8220;CurrentSiteManager in your model(s). It\u2019s a model manager that automatically filters its queries to include only objects associated with the current Site. Use CurrentSiteManager by adding it to your model explicitly. For example:<\/p>\n<p>from django.db import models<br>\nfrom django.contrib.sites.models import Site<br>\nfrom django.contrib.sites.managers import CurrentSiteManager<\/p>\n<p>class Photo(models.Model):<br>\nphoto = models.FileField(upload_to=&#8217;\/home\/photos&#8217;)<br>\nphotographer_name = models.CharField(maxlength=100)<br>\npub_date = models.DateField()<br>\nsite = models.ForeignKey(Site)<br>\nobjects = models.Manager()<br>\non_site = CurrentSiteManager()<\/p>\n<p>With this model, Photo.objects.all() will return all Photo objects in the database, but Photo.on_site.all() will return only the Photo objects associated with the current site, according to the SITE_ID setting. In other words, these two statements are equivalent:<\/p>\n<p>Photo.objects.filter(site=settings.SITE_ID)<br>\nPhoto.on_site.all()<\/p>\n<p>How did CurrentSiteManager know which field of Photo was the Site? It defaults to looking for a field called site. If your model has a ForeignKey or ManyToManyField called something other than site, you need to explicitly pass that as the parameter to CurrentSiteManager. The following model, which has a field called publish_on, demonstrates this:<\/p>\n<p>from django.db import models<br>\nfrom django.contrib.sites.models import Site<br>\nfrom django.contrib.sites.managers import CurrentSiteManager<\/p>\n<p>class Photo(models.Model):<br>\nphoto = models.FileField(upload_to=&#8217;\/home\/photos&#8217;)<br>\nphotographer_name = models.CharField(maxlength=100)<br>\npub_date = models.DateField()<br>\npublish_on = models.ForeignKey(Site)<br>\nobjects = models.Manager()<br>\non_site = CurrentSiteManager(&#8216;publish_on&#8217;)<\/p>\n<p>If you attempt to use CurrentSiteManager and pass a field name that doesn\u2019t exist, Django will raise a ValueError.<\/p>\n<p>Note &#8211; You\u2019ll probably want to keep a normal (non-site-specific) Manager on your model, even if you use CurrentSiteManager. As explained in Appendix B, if you define a manager manually, then Django won\u2019t create the automatic objects = models.Manager() manager for you.<br>\nAlso, certain parts of Django \u2014 namely, the Django admin site and generic views \u2014 use whichever manager is defined first in the model, so if you want your admin site to have access to all objects (not just site-specific ones), put objects = models.Manager() in your model, before you define CurrentSiteManager.<\/p>\n<p><strong>How Django Uses the Sites Framework<\/strong> &#8211; Although it\u2019s not required that you use the sites framework, it\u2019s strongly encouraged, because Django takes advantage of it in a few places. Even if your Django installation is powering only a single site, you should take a few seconds to create the site object with your domain and name, and point to its ID in your SITE_ID setting. Here\u2019s how Django uses the sites framework:<\/p>\n<ul>\n<li>In the redirects framework, each redirect object is associated with a particular site. When Django searches for a redirect, it takes into account the current SITE_ID.<\/li>\n<li>In the comments framework, each comment is associated with a particular site. When a comment is posted, its site is set to the current SITE_ID, and when comments are listed via the appropriate template tag, only the comments for the current site are displayed.<\/li>\n<li>In the flatpages framework, each flatpage is associated with a particular site. When a flatpage is created, you specify its site, and the flatpage middleware checks the current SITE_ID in retrieving flatpages to display.<\/li>\n<li>In the syndication framework, the templates for title and description automatically have access to a variable {{ site }}, which is the Site object representing the current site. Also, the hook for providing item URLs will use the domain from the current Site object if you don\u2019t specify a fully qualified domain.<\/li>\n<li>In the authentication framework, the django.contrib.auth.views.login view passes the current Site name to the template as {{ site_name }}.<\/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>Django\u2019s sites system is a generic framework that lets you operate multiple Web sites from the same database and Django project. This is an abstract concept, and it can be tricky to understand, so we\u2019ll start with a couple of scenarios where it would be useful. Scenario 1: Reusing Data on Multiple Sites &#8211; As&#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":[6985],"class_list":["post-75860","page","type-page","status-publish","hentry","category-django-web-development","tag-sites"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Sites - 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\/sites\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sites - Tutorial\" \/>\n<meta property=\"og:description\" content=\"Django\u2019s sites system is a generic framework that lets you operate multiple Web sites from the same database and Django project. This is an abstract concept, and it can be tricky to understand, so we\u2019ll start with a couple of scenarios where it would be useful. Scenario 1: Reusing Data on Multiple Sites &#8211; As...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/\" \/>\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:40+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 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\/sites\/\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/\",\"name\":\"Sites - Tutorial\",\"isPartOf\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#website\"},\"datePublished\":\"2020-01-20T06:53:25+00:00\",\"dateModified\":\"2024-04-12T08:47:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.vskills.in\/certification\/tutorial\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sites\"}]},{\"@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":"Sites - 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\/sites\/","og_locale":"en_US","og_type":"article","og_title":"Sites - Tutorial","og_description":"Django\u2019s sites system is a generic framework that lets you operate multiple Web sites from the same database and Django project. This is an abstract concept, and it can be tricky to understand, so we\u2019ll start with a couple of scenarios where it would be useful. Scenario 1: Reusing Data on Multiple Sites &#8211; As...","og_url":"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/","og_site_name":"Tutorial","article_publisher":"https:\/\/www.facebook.com\/vskills.in\/","article_modified_time":"2024-04-12T08:47:40+00:00","twitter_misc":{"Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/","url":"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/","name":"Sites - Tutorial","isPartOf":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#website"},"datePublished":"2020-01-20T06:53:25+00:00","dateModified":"2024-04-12T08:47:40+00:00","breadcrumb":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.vskills.in\/certification\/tutorial\/sites\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/sites\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.vskills.in\/certification\/tutorial\/"},{"@type":"ListItem","position":2,"name":"Sites"}]},{"@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\/75860","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=75860"}],"version-history":[{"count":4,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages\/75860\/revisions"}],"predecessor-version":[{"id":83404,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages\/75860\/revisions\/83404"}],"wp:attachment":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/media?parent=75860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/categories?post=75860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/tags?post=75860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}