{"id":7818,"date":"2019-08-30T12:54:48","date_gmt":"2019-08-30T12:54:48","guid":{"rendered":"https:\/\/www.botreetechnologies.com\/blog\/?p=7818"},"modified":"2026-04-01T12:20:09","modified_gmt":"2026-04-01T06:50:09","slug":"django-user-groups-and-permission","status":"publish","type":"post","link":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/","title":{"rendered":"Django User Groups and Permission"},"content":{"rendered":"\n<p>We had a content curation application covering 4 roles Admin, Editor, Contributor, and Client.<\/p>\n\n\n\n<p>Each of the roles had certain permission and access rights, and we had to block access to unauthorized roles. This would have been simple if the access had been at model level but we had to give them access at the object level.<\/p>\n\n\n\n<p>For example let us say there were 2 editors editor A and editor B if editor A has created a content X then editor B should not be able to view, edit or delete content X unless he has been assigned to the content X.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.botreetechnologies.com\/django-development\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"150\" src=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/cta-django-development.png\" alt=\"Call now for Django web Development\" class=\"wp-image-13030\" srcset=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/cta-django-development.png 700w, https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/cta-django-development-300x64.png 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><a href=\"https:\/\/www.botreetechnologies.com\/django-development\" target=\"_blank\" rel=\"noreferrer noopener\">Django<\/a> does provide groups and permissions option but this is a model or table level and not at the object level. Hence we decided on creating groups based on the objects on which we want to provide the access and the users were added to these groups as per requirement or based on the existing state of an object.<\/p>\n\n\n\n<p>So our solution had 3 parts,<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define the groups<\/li>\n\n\n\n<li>Add user to respective groups<\/li>\n\n\n\n<li>Verify access using decorator<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Read Also: <a href=\"https:\/\/www.botreetechnologies.com\/blog\/django-web-framework-startups\/\" target=\"_blank\" rel=\"noreferrer noopener\">7 Reasons Django Web Framework is Perfect for Startups<\/a><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Defining groups<\/h3>\n\n\n\n<p>We created a constants file where we defined all the groups and permissions, the name of the file was permission_constants.py there was always one file for each application.<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/Nipun2016\/4a55679039b7b822dce6e0da749876c4.js\"><\/script><\/p>\n\n\n\n<p>The idea here is to create groups for each object on which we want to provide access control.<\/p>\n\n\n\n<p>Below is how we had designed the naming convention of the groups<\/p>\n\n\n\n<p>\u201cId_of_object_\u201d+\u201dmodel name\u201d+\u201dstring of the group\u201d eg 10_project_super_group where 10 is the id of the project object, project is the name of model and super_group is the name of the group.<\/p>\n\n\n\n<p>Below is the script in utils.py for generating groups and assigning permissions to those groups<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/mit1106-btc\/ee0b0aaf09d901a81b494893b53c1d30.js\"><\/script><\/p>\n\n\n\n<p>Below is the code for calling the above method in signals whenever an object is created. In this case, it\u2019s the project.<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/Nipun2016\/ba57df0e92c07d282d8126b0803996e3.js\"><\/script><\/p>\n\n\n\n<p>The next part is adding a user to the respective groups.<\/p>\n\n\n\n<p>Add user to respective groups<\/p>\n\n\n\n<p>For adding the user to a group we need to retrieve the groups associated with a given user and add our groups to it, refer line number 21 and 22 in the above-mentioned code.<\/p>\n\n\n\n<p><code>instance.editor.user_id.groups.add(super_group)<\/code><\/p>\n\n\n\n<p><code>instance.client.user_id.groups.add(view_group)<\/code><\/p>\n\n\n\n<p>The final step is to enable access control using a decorator.<\/p>\n\n\n\n<p><strong>Verify Access Using Decorator<\/strong><\/p>\n\n\n\n<p>The main idea behind the steps defined above was to use a single decorator to apply access control for most of the views. Since we had already defined the groups and allocated users to those groups all we had to do was to pass the permissions required to access the view in the decorator and the current user who wants to access the view. If the user was in the group having particular permission then he can access the view or else we sent an error.<\/p>\n\n\n\n<p>Code of the decorator<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/mit1106-btc\/e3120771d86f758016eb186997b75f5e.js\"><\/script><\/p>\n\n\n\n<p>Code for applying decorator on the views<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/mit1106-btc\/73ffd76c9616b5f81daa62019abe068d.js\"><\/script><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.botreetechnologies.com\/django-development\" target=\"_blank\" rel=\"noreferrer noopener\">Click here for more details<\/a>&#8230;<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p>At <a href=\"https:\/\/www.botreetechnologies.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">BoTree Technologies<\/a>, we build enterprise applications with our Django team of 20+ engineers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.botreetechnologies.com\/contact\" target=\"_blank\" rel=\"noreferrer noopener\">Consulting is free<\/a> &#8211; let us help you grow!<\/h3>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>We had a content curation application covering 4 roles Admin,&#8230;<\/p>\n","protected":false},"author":7,"featured_media":13029,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68,10],"tags":[],"class_list":["post-7818","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django","category-technology"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Django User Groups and Permission - BoTree Technologies<\/title>\n<meta name=\"description\" content=\"Want to block unauthorized permissions on a content curation app? Here\u2019s how we used Django User Groups and Permissions to implement that.\" \/>\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.botreetechnologies.com\/blog\/django-user-groups-and-permission\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Django User Groups and Permission - BoTree Technologies\" \/>\n<meta property=\"og:description\" content=\"Want to block unauthorized permissions on a content curation app? Here\u2019s how we used Django User Groups and Permissions to implement that.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/\" \/>\n<meta property=\"og:site_name\" content=\"BoTree Technologies\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/BoTreeTechnologies\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-30T12:54:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-01T06:50:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"853\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Shardul Bhatt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@BoTreeTech\" \/>\n<meta name=\"twitter:site\" content=\"@BoTreeTech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Shardul Bhatt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/\"},\"author\":{\"name\":\"Shardul Bhatt\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/101411d1d5b152c35ea87f092ce11f0e\"},\"headline\":\"Django User Groups and Permission\",\"datePublished\":\"2019-08-30T12:54:48+00:00\",\"dateModified\":\"2026-04-01T06:50:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/\"},\"wordCount\":515,\"commentCount\":13,\"image\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg\",\"articleSection\":[\"Django\",\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/\",\"name\":\"Django User Groups and Permission - BoTree Technologies\",\"isPartOf\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg\",\"datePublished\":\"2019-08-30T12:54:48+00:00\",\"dateModified\":\"2026-04-01T06:50:09+00:00\",\"author\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/101411d1d5b152c35ea87f092ce11f0e\"},\"description\":\"Want to block unauthorized permissions on a content curation app? Here\u2019s how we used Django User Groups and Permissions to implement that.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#primaryimage\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg\",\"contentUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg\",\"width\":1280,\"height\":853,\"caption\":\"Django User Groups and Permission\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.botreetechnologies.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Django User Groups and Permission\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#website\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/\",\"name\":\"BoTree Technologies\",\"description\":\"Committed to inspire generation.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.botreetechnologies.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/101411d1d5b152c35ea87f092ce11f0e\",\"name\":\"Shardul Bhatt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/shardul-bhatt-150x150.png\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/shardul-bhatt-150x150.png\",\"contentUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/shardul-bhatt-150x150.png\",\"caption\":\"Shardul Bhatt\"},\"description\":\"Shardul strongly believes that the potential to surpass expectations is inherent to each individual. He is committed to helping each and every member at BoTree achieve their dreams and get the most out of their lives. He has a strong technical background and has been in the industry since 2002. He is building BoTree since 2012. He loves to read, exchange ideas and travel.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Django User Groups and Permission - BoTree Technologies","description":"Want to block unauthorized permissions on a content curation app? Here\u2019s how we used Django User Groups and Permissions to implement that.","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.botreetechnologies.com\/blog\/django-user-groups-and-permission\/","og_locale":"en_US","og_type":"article","og_title":"Django User Groups and Permission - BoTree Technologies","og_description":"Want to block unauthorized permissions on a content curation app? Here\u2019s how we used Django User Groups and Permissions to implement that.","og_url":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/","og_site_name":"BoTree Technologies","article_publisher":"https:\/\/www.facebook.com\/BoTreeTechnologies\/","article_published_time":"2019-08-30T12:54:48+00:00","article_modified_time":"2026-04-01T06:50:09+00:00","og_image":[{"width":1280,"height":853,"url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg","type":"image\/jpeg"}],"author":"Shardul Bhatt","twitter_card":"summary_large_image","twitter_creator":"@BoTreeTech","twitter_site":"@BoTreeTech","twitter_misc":{"Written by":"Shardul Bhatt","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#article","isPartOf":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/"},"author":{"name":"Shardul Bhatt","@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/101411d1d5b152c35ea87f092ce11f0e"},"headline":"Django User Groups and Permission","datePublished":"2019-08-30T12:54:48+00:00","dateModified":"2026-04-01T06:50:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/"},"wordCount":515,"commentCount":13,"image":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#primaryimage"},"thumbnailUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg","articleSection":["Django","Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/","url":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/","name":"Django User Groups and Permission - BoTree Technologies","isPartOf":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#primaryimage"},"image":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#primaryimage"},"thumbnailUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg","datePublished":"2019-08-30T12:54:48+00:00","dateModified":"2026-04-01T06:50:09+00:00","author":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/101411d1d5b152c35ea87f092ce11f0e"},"description":"Want to block unauthorized permissions on a content curation app? Here\u2019s how we used Django User Groups and Permissions to implement that.","breadcrumb":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#primaryimage","url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg","contentUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2019\/08\/django-user-groups-and-permission.jpg","width":1280,"height":853,"caption":"Django User Groups and Permission"},{"@type":"BreadcrumbList","@id":"https:\/\/www.botreetechnologies.com\/blog\/django-user-groups-and-permission\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.botreetechnologies.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Django User Groups and Permission"}]},{"@type":"WebSite","@id":"https:\/\/www.botreetechnologies.com\/blog\/#website","url":"https:\/\/www.botreetechnologies.com\/blog\/","name":"BoTree Technologies","description":"Committed to inspire generation.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.botreetechnologies.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/101411d1d5b152c35ea87f092ce11f0e","name":"Shardul Bhatt","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/shardul-bhatt-150x150.png","url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/shardul-bhatt-150x150.png","contentUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/shardul-bhatt-150x150.png","caption":"Shardul Bhatt"},"description":"Shardul strongly believes that the potential to surpass expectations is inherent to each individual. He is committed to helping each and every member at BoTree achieve their dreams and get the most out of their lives. He has a strong technical background and has been in the industry since 2002. He is building BoTree since 2012. He loves to read, exchange ideas and travel."}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/7818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/comments?post=7818"}],"version-history":[{"count":5,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/7818\/revisions"}],"predecessor-version":[{"id":20648,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/7818\/revisions\/20648"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/media\/13029"}],"wp:attachment":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/media?parent=7818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/categories?post=7818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/tags?post=7818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}