{"id":2417,"date":"2026-10-09T10:36:54","date_gmt":"2026-10-09T10:36:54","guid":{"rendered":"https:\/\/entri.app\/explore\/?post_type=curriculum&#038;p=2417"},"modified":"2026-10-09T10:41:33","modified_gmt":"2026-10-09T10:41:33","slug":"python-django-views","status":"publish","type":"curriculum","link":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/","title":{"rendered":"Python Django Views"},"content":{"rendered":"<h2><strong><b>What Are Views in Django? Function-Based, Class-Based and Generic Views<\/b><\/strong><\/h2>\n<p>Views in Django are Python functions or classes that receive a web request and return a web response: an HTML page, a redirect, a 404 error, JSON or a file. A view sits between your URLs and your data. It reads the request, fetches or saves data through models, and passes the result to a template or serializer.<\/p>\n<p>Every view follows one contract: it takes an HttpRequest\u00a0as its first argument and must return an HttpResponse\u00a0(or raise an exception such as Http404). Everything else, such as which template to use or what to query, is up to you.<\/p>\n<h2><strong><b>Function-Based Views vs Class-Based Views<\/b><\/strong><\/h2>\n<p>Django supports two styles. <strong><b>Function-based views (FBVs)<\/b><\/strong>\u00a0are plain Python functions, so the logic is explicit and easy to follow. <strong><b>Class-based views (CBVs)<\/b><\/strong>\u00a0are classes that handle each HTTP method in its own method (get(), post()), and they can be extended through inheritance and mixins.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"166\"><\/td>\n<td width=\"292\"><strong><b>Function-based view<\/b><\/strong><\/td>\n<td width=\"292\"><strong><b>Class-based view<\/b><\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"166\">Looks like<\/td>\n<td width=\"292\">def post_list(request): \u2026<\/td>\n<td width=\"292\">class PostList(ListView): \u2026<\/td>\n<\/tr>\n<tr>\n<td width=\"166\">Wired in urls.py as<\/td>\n<td width=\"292\">views.post_list<\/td>\n<td width=\"292\">views.PostList.as_view()<\/td>\n<\/tr>\n<tr>\n<td width=\"166\">Handling GET vs POST<\/td>\n<td width=\"292\">if request.method == &#8220;POST&#8221;:<\/td>\n<td width=\"292\">Separate get() and post() methods<\/td>\n<\/tr>\n<tr>\n<td width=\"166\">Reuse<\/td>\n<td width=\"292\">Decorators such as @login_required<\/td>\n<td width=\"292\">Inheritance and mixins such as LoginRequiredMixin<\/td>\n<\/tr>\n<tr>\n<td width=\"166\">Best for<\/td>\n<td width=\"292\">One-off or unusual logic, learning<\/td>\n<td width=\"292\">Standard list\/detail\/create\/update\/delete pages<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2><strong><b>What Are Generic Views in Django?<\/b><\/strong><\/h2>\n<p>Generic views are ready-made class-based views in django.views.generic\u00a0that implement common page patterns. You configure them with attributes like model, template_name, fields\u00a0and success_url\u00a0instead of writing the query and rendering code yourself.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"191\"><strong><b>Generic view<\/b><\/strong><\/td>\n<td width=\"352\"><strong><b>What it does<\/b><\/strong><\/td>\n<td width=\"208\"><strong><b>Default template<\/b><\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"191\">TemplateView<\/td>\n<td width=\"352\">Renders a template, optionally with extra context<\/td>\n<td width=\"208\">Set with template_name<\/td>\n<\/tr>\n<tr>\n<td width=\"191\">ListView<\/td>\n<td width=\"352\">Lists objects of a model, with optional pagination<\/td>\n<td width=\"208\">&lt;app&gt;\/&lt;model&gt;_list.html<\/td>\n<\/tr>\n<tr>\n<td width=\"191\">DetailView<\/td>\n<td width=\"352\">Shows one object found by pk or slug<\/td>\n<td width=\"208\">&lt;app&gt;\/&lt;model&gt;_detail.html<\/td>\n<\/tr>\n<tr>\n<td width=\"191\">CreateView<\/td>\n<td width=\"352\">Displays and processes a form that creates an object<\/td>\n<td width=\"208\">&lt;app&gt;\/&lt;model&gt;_form.html<\/td>\n<\/tr>\n<tr>\n<td width=\"191\">UpdateView<\/td>\n<td width=\"352\">Displays and processes a form that edits an object<\/td>\n<td width=\"208\">&lt;app&gt;\/&lt;model&gt;_form.html<\/td>\n<\/tr>\n<tr>\n<td width=\"191\">DeleteView<\/td>\n<td width=\"352\">Confirms and deletes an object<\/td>\n<td width=\"208\">&lt;app&gt;\/&lt;model&gt;_confirm_delete.html<\/td>\n<\/tr>\n<tr>\n<td width=\"191\">FormView \/ RedirectView<\/td>\n<td width=\"352\">Processes a non-model form \/ redirects to another URL<\/td>\n<td width=\"208\">Set with template_name \/ none<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2><strong><b>How to Get Data from the Database in a Django View<\/b><\/strong><\/h2>\n<p>Inside a view you query a model through its manager, Model.objects, then pass the results to a template in the context dictionary. Use get_object_or_404()\u00a0when fetching a single row, so a missing record returns a proper 404 page instead of a server error.<\/p>\n<p>from django.shortcuts import render, get_object_or_404<\/p>\n<p>from .models import Post<\/p>\n<p>&nbsp;<\/p>\n<p>def post_list(request):<\/p>\n<p>posts = Post.objects.filter(published=True).order_by(&#8220;-created_at&#8221;)<\/p>\n<p>return render(request, &#8220;blog\/post_list.html&#8221;, {&#8220;posts&#8221;: posts})<\/p>\n<p>&nbsp;<\/p>\n<p>def post_detail(request, slug):<\/p>\n<p>post = get_object_or_404(Post, slug=slug, published=True)<\/p>\n<p>return render(request, &#8220;blog\/post_detail.html&#8221;, {&#8220;post&#8221;: post})<\/p>\n<p>&nbsp;<\/p>\n<p>For related data, add select_related(&#8220;author&#8221;)\u00a0(ForeignKey) or prefetch_related(&#8220;tags&#8221;)\u00a0(many-to-many) to the query so the template doesn&#8217;t trigger one extra query per row.<\/p>\n<h2><strong><b>How to Import Views in Django (urls.py)<\/b><\/strong><\/h2>\n<p>Views are connected to URLs in a URLconf. Inside an app, import the app&#8217;s views module with a relative import and reference each view in path(). Then include the app&#8217;s URLs from the project&#8217;s root urls.py.<\/p>\n<p># blog\/urls.py<\/p>\n<p>from django.urls import path<\/p>\n<p>from . import views<\/p>\n<p>&nbsp;<\/p>\n<p>app_name = &#8220;blog&#8221;<\/p>\n<p>urlpatterns = [<\/p>\n<p>path(&#8220;&#8221;, views.post_list, name=&#8221;post_list&#8221;),<\/p>\n<p>path(&#8220;&lt;slug:slug&gt;\/&#8221;, views.post_detail, name=&#8221;post_detail&#8221;),<\/p>\n<p>]<\/p>\n<p>&nbsp;<\/p>\n<p># mysite\/urls.py<\/p>\n<p>from django.urls import include, path<\/p>\n<p>urlpatterns = [<\/p>\n<p>path(&#8220;blog\/&#8221;, include(&#8220;blog.urls&#8221;)),<\/p>\n<p>]<\/p>\n<p>&nbsp;<\/p>\n<p>Prefer from . import views\u00a0over from .views import *. It keeps names unambiguous and makes it obvious where each view comes from.<\/p>\n<h2><strong><b>How to Create a View in Django That Fetches Data from the Database<\/b><\/strong><\/h2>\n<p>You will build a blog list page and a detail page: first as function-based views, then by converting the list page to a generic ListView. It takes 7 steps and about 25 minutes, and assumes you already have a project with a blog\u00a0app.<\/p>\n<h2><strong><b>Prerequisites<\/b><\/strong><\/h2>\n<ul>\n<li>A Django project with an app named blogadded to INSTALLED_APPS\u00a0(see the Django topic&#8217;s tutorial).<\/li>\n<li>Migrations applied (python manage.py migrate) and a superuser created.<\/li>\n<li>Basic Python classes and functions.<\/li>\n<\/ul>\n<h2><strong><b>Steps<\/b><\/strong><\/h2>\n<h3><strong><b>Step 1: Define a model<\/b><\/strong><\/h3>\n<p>Add a Post\u00a0model to blog\/models.py, then run makemigrations\u00a0and migrate.<\/p>\n<p>from django.db import models<\/p>\n<p>&nbsp;<\/p>\n<p>class Post(models.Model):<\/p>\n<p>title = models.CharField(max_length=200)<\/p>\n<p>slug = models.SlugField(unique=True)<\/p>\n<p>body = models.TextField()<\/p>\n<p>published = models.BooleanField(default=True)<\/p>\n<p>created_at = models.DateTimeField(auto_now_add=True)<\/p>\n<p>&nbsp;<\/p>\n<p>def __str__(self):<\/p>\n<p>return self.title<\/p>\n<p>&nbsp;<\/p>\n<h3><strong><b>Step 2: Add sample data through the admin<\/b><\/strong><\/h3>\n<p>Register the model in blog\/admin.py\u00a0with admin.site.register(Post), open \/admin\/ and create two or three posts.<\/p>\n<p>&nbsp;<\/p>\n<p><em><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2418 size-medium\" src=\"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-300x185.webp\" alt=\"\" width=\"300\" height=\"185\" srcset=\"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-300x185.webp 300w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-1024x633.webp 1024w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-768x475.webp 768w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-1536x950.webp 1536w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-2048x1266.webp 2048w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio.webp 2080w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\">.<\/em><\/p>\n<h3><strong><b>Step 3: Write a function-based list view<\/b><\/strong><\/h3>\n<p>In blog\/views.py, query published posts and render them.<\/p>\n<p>from django.shortcuts import render, get_object_or_404<\/p>\n<p>from .models import Post<\/p>\n<p>&nbsp;<\/p>\n<p>def post_list(request):<\/p>\n<p>posts = Post.objects.filter(published=True).order_by(&#8220;-created_at&#8221;)<\/p>\n<p>return render(request, &#8220;blog\/post_list.html&#8221;, {&#8220;posts&#8221;: posts})<\/p>\n<p>&nbsp;<\/p>\n<h3><strong><b>Step 4: Write a detail view<\/b><\/strong><\/h3>\n<p>Fetch one post by its slug; a wrong slug returns a 404.<\/p>\n<p>def post_detail(request, slug):<\/p>\n<p>post = get_object_or_404(Post, slug=slug, published=True)<\/p>\n<p>return render(request, &#8220;blog\/post_detail.html&#8221;, {&#8220;post&#8221;: post})<\/p>\n<p>&nbsp;<\/p>\n<h3><strong><b>Step 5: Import the views and map URLs<\/b><\/strong><\/h3>\n<p>Create blog\/urls.py\u00a0with from . import views\u00a0and two path()\u00a0entries (shown above in &#8220;How to Import Views&#8221;), then add path(&#8220;blog\/&#8221;, include(&#8220;blog.urls&#8221;))\u00a0to the project URLconf.<\/p>\n<h3><strong><b>Step 6: Create minimal templates<\/b><\/strong><\/h3>\n<p>Create blog\/templates\/blog\/post_list.html\u00a0that loops over posts\u00a0and links to each post, and post_detail.html\u00a0that shows {{ post.title }}\u00a0and {{ post.body|linebreaks }}.<\/p>\n<p>{% for post in posts %}<\/p>\n<p>&lt;a href=&#8221;{% url &#8216;blog:post_detail&#8217; post.slug %}&#8221;&gt;{{ post.title }}&lt;\/a&gt;<\/p>\n<p>{% empty %}<\/p>\n<p>&lt;p&gt;No posts yet.&lt;\/p&gt;<\/p>\n<p>{% endfor %}<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2419 size-medium\" src=\"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/django_views_step6-300x91.webp\" alt=\"django_views_step\" width=\"300\" height=\"91\" srcset=\"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/django_views_step6-300x91.webp 300w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/django_views_step6-1024x310.webp 1024w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/django_views_step6-768x233.webp 768w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/django_views_step6-1536x465.webp 1536w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/django_views_step6-2048x620.webp 2048w, https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/django_views_step6.webp 2080w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\"><\/p>\n<p><em>Figure: The unstyled post list rendered by the post_list view at \/blog\/.<\/em><\/p>\n<h3><strong><b>Step 7: Convert the list page to a generic ListView<\/b><\/strong><\/h3>\n<p>Replace post_list\u00a0with a class-based view and update the URL to views.PostList.as_view(). The template keeps working because context_object_name\u00a0is set to posts.<\/p>\n<p>from django.views.generic import ListView<\/p>\n<p>&nbsp;<\/p>\n<p>class PostList(ListView):<\/p>\n<p>queryset = Post.objects.filter(published=True).order_by(&#8220;-created_at&#8221;)<\/p>\n<p>template_name = &#8220;blog\/post_list.html&#8221;<\/p>\n<p>context_object_name = &#8220;posts&#8221;<\/p>\n<p>paginate_by = 10<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What Are Views in Django? Function-Based, Class-Based and Generic Views Views in Django are Python functions or classes that receive a web request and return a web response: an HTML page, a redirect, a 404 error, JSON or a file. A view sits between your URLs and your data. It reads the request, fetches or [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"template":"","meta":{"_acf_changed":false},"curriculum-category":[158,149],"custom_linking_tags":[161],"class_list":["post-2417","curriculum","type-curriculum","status-publish","hentry","curriculum-category-django","curriculum-category-python-tutorials","custom_linking_tags-django-mcqs"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python Django Views<\/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:\/\/entri.app\/explore\/python-programming\/python-django-views\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Django Views\" \/>\n<meta property=\"og:description\" content=\"What Are Views in Django? Function-Based, Class-Based and Generic Views Views in Django are Python functions or classes that receive a web request and return a web response: an HTML page, a redirect, a 404 error, JSON or a file. A view sits between your URLs and your data. It reads the request, fetches or [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/\" \/>\n<meta property=\"og:site_name\" content=\"Entri Free Materials\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-09T10:41:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2080\" \/>\n\t<meta property=\"og:image:height\" content=\"1286\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/\",\"url\":\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/\",\"name\":\"Python Django Views\",\"isPartOf\":{\"@id\":\"https:\/\/entri.app\/explore\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-300x185.webp\",\"datePublished\":\"2026-10-09T10:36:54+00:00\",\"dateModified\":\"2026-10-09T10:41:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#primaryimage\",\"url\":\"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-300x185.webp\",\"contentUrl\":\"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-300x185.webp\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/entri.app\/explore\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python Django Views\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/entri.app\/explore\/#website\",\"url\":\"https:\/\/entri.app\/explore\/\",\"name\":\"Entri Free Materials\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/entri.app\/explore\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/entri.app\/explore\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/entri.app\/explore\/#organization\",\"name\":\"Entri Free Materials\",\"url\":\"https:\/\/entri.app\/explore\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/entri.app\/explore\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/wp-cdn.entri.app\/explore\/2025\/03\/logo.svg\",\"contentUrl\":\"https:\/\/wp-cdn.entri.app\/explore\/2025\/03\/logo.svg\",\"caption\":\"Entri Free Materials\"},\"image\":{\"@id\":\"https:\/\/entri.app\/explore\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python Django Views","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:\/\/entri.app\/explore\/python-programming\/python-django-views\/","og_locale":"en_US","og_type":"article","og_title":"Python Django Views","og_description":"What Are Views in Django? Function-Based, Class-Based and Generic Views Views in Django are Python functions or classes that receive a web request and return a web response: an HTML page, a redirect, a 404 error, JSON or a file. A view sits between your URLs and your data. It reads the request, fetches or [&hellip;]","og_url":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/","og_site_name":"Entri Free Materials","article_modified_time":"2026-10-09T10:41:33+00:00","og_image":[{"width":2080,"height":1286,"url":"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/","url":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/","name":"Python Django Views","isPartOf":{"@id":"https:\/\/entri.app\/explore\/#website"},"primaryImageOfPage":{"@id":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#primaryimage"},"image":{"@id":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#primaryimage"},"thumbnailUrl":"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-300x185.webp","datePublished":"2026-10-09T10:36:54+00:00","dateModified":"2026-10-09T10:41:33+00:00","breadcrumb":{"@id":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/entri.app\/explore\/python-programming\/python-django-views\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#primaryimage","url":"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-300x185.webp","contentUrl":"https:\/\/wp-cdn.entri.app\/explore\/2026\/10\/steps_djangio-300x185.webp"},{"@type":"BreadcrumbList","@id":"https:\/\/entri.app\/explore\/python-programming\/python-django-views\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/entri.app\/explore\/"},{"@type":"ListItem","position":2,"name":"Python Django Views"}]},{"@type":"WebSite","@id":"https:\/\/entri.app\/explore\/#website","url":"https:\/\/entri.app\/explore\/","name":"Entri Free Materials","description":"","publisher":{"@id":"https:\/\/entri.app\/explore\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/entri.app\/explore\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/entri.app\/explore\/#organization","name":"Entri Free Materials","url":"https:\/\/entri.app\/explore\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/entri.app\/explore\/#\/schema\/logo\/image\/","url":"https:\/\/wp-cdn.entri.app\/explore\/2025\/03\/logo.svg","contentUrl":"https:\/\/wp-cdn.entri.app\/explore\/2025\/03\/logo.svg","caption":"Entri Free Materials"},"image":{"@id":"https:\/\/entri.app\/explore\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/entri.app\/explore\/wp-json\/wp\/v2\/curriculum\/2417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/entri.app\/explore\/wp-json\/wp\/v2\/curriculum"}],"about":[{"href":"https:\/\/entri.app\/explore\/wp-json\/wp\/v2\/types\/curriculum"}],"author":[{"embeddable":true,"href":"https:\/\/entri.app\/explore\/wp-json\/wp\/v2\/users\/2"}],"wp:attachment":[{"href":"https:\/\/entri.app\/explore\/wp-json\/wp\/v2\/media?parent=2417"}],"wp:term":[{"taxonomy":"curriculum-category","embeddable":true,"href":"https:\/\/entri.app\/explore\/wp-json\/wp\/v2\/curriculum-category?post=2417"},{"taxonomy":"custom_linking_tags","embeddable":true,"href":"https:\/\/entri.app\/explore\/wp-json\/wp\/v2\/custom_linking_tags?post=2417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}