1 2 3<!doctype html> 4<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en-us" lang="en-us" ng-app> 5 <head> 6 <meta charset="UTF-8" /> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 9 <meta name="theme-color" content="#f8f8f8" /> 10 11 12 <!-- HTML Meta Tags --> 13<title>Django Packages : Grids</title> 14<meta name="description" content="Django Packages stores information on fetched packages and provides easy comparison tools for them. Public APIs include PyPI, GitHub, and Bitbucket." /> 15<meta name="keywords" content="Django, Django Apps, Packages, Tools, Django Sites, Django Resources" /> 16 17<meta property="og:description" content="Django Packages stores information on fetched packages and provides easy comparison tools for them. Public APIs include PyPI, GitHub, and Bitbucket." /> 18<meta property="og:image" content="https://djangopackages.org/static/img/open_graph.png" /> 19<meta property="og:image:alt" content="Django Packages logo" /> 20<meta property="og:image:height" content="630" /> 21<meta property="og:image:type" content="image/png" /> 22<meta property="og:image:width" content="1200" /> 23<meta property="og:site_name" content="Django Packages" /> 24<meta property="og:title" content="Django Packages : Grids" /> 25<meta property="og:type" content="website" /> 26<meta property="og:url" content="https://djangopackages.org/grids/" /> 27 28<!-- Twitter Meta Tags --> 29<meta property="twitter:domain" content="djangopackages.org"> 30<meta property="twitter:url" content="https://djangopackages.org/grids/" /> 31<meta name="twitter:card" content="summary_large_image"> 32<meta name="twitter:description" content="Django Packages stores information on fetched packages and provides easy comparison tools for them. Public APIs include PyPI, GitHub, and Bitbucket." /> 33<meta name="twitter:image" content="https://djangopackages.org/static/img/open_graph.png" /> 34<meta name="twitter:title" content="Django Packages : Grids" /> 35 36 37 <link rel="search" type="application/opensearchdescription+xml" href="/search/opensearch/description/" title="Django Packages"> 38 39 40 41
41<script> 42 document.documentElement.classList.toggle( 43 "dark", 44 localStorage.theme === "dark" || 45 (!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches), 46 ); 47 </script>
47 48 49 50 51<link rel="preload" href="/static/css/tailwind.css" as="style"> 52<link rel="stylesheet" href="/static/css/tailwind.css"> 53 54 55 56 <link rel="stylesheet" href="/static/css/phosphor-icons/bold.min.css" type="text/css" /> 57 <link rel="shortcut icon" href="/static/img/favicon.png" /> 58 59 60 61
62<script async src="https://media.ethicalads.io/media/client/ethicalads.min.js"></script>
62 63
64<script> 65 (function () { 66 function shouldReveal(adDiv) { 67 if (!adDiv) return false; 68 // EthicalAds injects markup into the placement div when an ad loads. 69 return adDiv.childNodes && adDiv.childNodes.length > 0 && adDiv.innerText && adDiv.innerText.trim().length > 0; 70 } 71 72 function reveal(slotEl) { 73 if (!slotEl) return; 74 slotEl.removeAttribute("hidden"); 75 } 76 77 function initSlot(slotEl) { 78 var adDiv = slotEl.querySelector("[data-ea-publisher]"); 79 if (shouldReveal(adDiv)) { 80 reveal(slotEl); 81 return; 82 } 83 84 // If the EthicalAds script is blocked, this observer will simply never fire, 85 // and the slot stays hidden (no extra whitespace). 86 var obs = new MutationObserver(function () { 87 if (shouldReveal(adDiv)) { 88 reveal(slotEl); 89 obs.disconnect(); 90 } 91 }); 92 93 obs.observe(adDiv, { childList: true, subtree: true, characterData: true }); 94 95 // Donât keep observers around forever on pages where no ad is returned. 96 window.setTimeout(function () { 97 try { obs.disconnect(); } catch (e) {} 98 }, 8000); 99 } 100 101 function initAll() { 102 document.querySelectorAll("[data-ethicalads-slot]").forEach(initSlot); 103 } 104 105 if (document.readyState === "loading") { 106 document.addEventListener("DOMContentLoaded", initAll); 107 } else { 108 initAll(); 109 } 110 })(); 111</script>
111 112 113 114 </head> 115 <body class="bg-background flex min-h-screen flex-col"> 116 117 118 119<!-- Header --> 120<header class="sticky top-0 z-40 px-3 pt-3 sm:px-4"> 121 <div class="bg-brand dark:bg-brand/75 container rounded-md border border-white/15 px-4 shadow-lg inset-shadow-[0_1px_0_0_oklch(1_0_0/0.10)] shadow-black/10 backdrop-blur-xl backdrop-saturate-150 sm:px-6 dark:shadow-black/40"> 122 <div class="flex h-14 items-center justify-between"> 123 <div class="flex items-center gap-6"> 124 <a href="/" class="flex items-center gap-2"> 125 <img src="/static/img/logo_squares.png" class="h-6 w-auto sm:h-7" alt="Django Packages" /> 126 <span class="text-brand-foreground text-base font-bold whitespace-nowrap sm:text-lg">Django Packages</span> 127 </a> 128 <nav class="hidden items-center gap-4 lg:flex"> 129 <a 130 href="/packages/" 131 class="text-brand-foreground/80 hover:text-brand-foreground hover:bg-brand-foreground/5 rounded-md px-3 py-2 text-sm font-medium transition-colors" 132 > 133 Packages 134 </a> 135 <a 136 href="/grids/" 137 class="text-brand-foreground/80 hover:text-brand-foreground hover:bg-brand-foreground/5 rounded-md px-3 py-2 text-sm font-medium transition-colors" 138 > 139 Grids 140 </a> 141 </nav> 142 </div> 143 144 <div class="flex items-center gap-1 sm:gap-4"> 145 146 147 <!-- Search Trigger (Modal Style) - Only shown on non-home pages --> 148 <button 149 type="button" 150 data-open-search-modal 151 class="text-brand-foreground/80 hover:text-brand-foreground hover:bg-brand-foreground/10 focus:ring-brand-foreground/30 lg:border-brand-foreground/20 lg:bg-brand-foreground/10 lg:hover:bg-brand-foreground/15 inline-flex h-9 w-9 items-center justify-center rounded-md transition-colors focus:ring-2 focus:outline-none lg:w-auto lg:gap-2 lg:border-2 lg:px-3" 152 aria-haspopup="dialog" 153 aria-controls="search-modal" 154 > 155 <i class="ph-bold ph-magnifying-glass text-base"></i> 156 <span class="hidden lg:inline">Search</span> 157 <span 158 class="text-brand-foreground/80 border-brand-foreground/20 hidden items-center space-x-1 rounded border bg-black/20 px-1.5 py-0.5 text-xs transition-colors xl:flex" 159 > 160 <span>⌘ /</span> 161 </span> 162 </button> 163 164 165 166 <!-- Theme toggle: cycles light â dark â system; app.js keeps the icon in sync --> 167 <button 168 type="button" 169 data-theme-toggle 170 class="text-brand-foreground/80 hover:text-brand-foreground hover:bg-brand-foreground/10 focus:ring-brand-foreground/30 inline-flex h-9 w-9 items-center justify-center rounded-md transition-colors focus:ring-2 focus:outline-none" 171 aria-label="Change theme" 172 > 173 <i class="ph-bold ph-circle-half text-xl" aria-hidden="true"></i> 174 </button> 175 176 177 <form method="post" action="/auth/login/github/" class="hidden lg:block"> 178 <input type="hidden" name="csrfmiddlewaretoken" value="jQXzLk797Dmvfv9l011FvACLAqffs63O2yUuU4xM4DZV15IcgnQdRyNohl4XadqD"> 179 <button 180 type="submit" 181 class="text-brand-foreground/90 bg-brand-foreground/10 border-brand-foreground/20 hover:text-brand-foreground hover:bg-brand-foreground/15 hover:border-brand-foreground
181/30 focus:ring-brand-foreground/30 inline-flex h-9 items-center justify-center rounded-md border px-3 text-sm font-semibold transition-colors focus:ring-2 focus:outline-none" 182 > 183 Log In 184 </button> 185 </form> 186 187 188 <!-- Mobile menu button --> 189 <button 190 id="mobile-menu-btn" 191 class="text-brand-foreground hover:bg-brand-foreground/10 rounded-md p-2 transition-colors lg:hidden" 192 > 193 <i class="ph-bold ph-list text-xl" id="menu-icon"></i> 194 </button> 195 </div> 196 </div> 197 198 <!-- Mobile menu --> 199 <div 200 id="mobile-menu" 201 class="hidden border-t border-white/10 lg:hidden" 202 > 203 <nav class="space-y-3 py-4"> 204 205 206 <button 207 type="button" 208 data-open-search-modal 209 class="text-brand-foreground/80 hover:text-brand-foreground hover:bg-brand-foreground/10 hidden w-full items-center gap-2 rounded-md px-3 py-2 text-left transition-colors" 210 aria-haspopup="dialog" 211 aria-controls="search-modal" 212 > 213 <i class="ph-bold ph-magnifying-glass text-base"></i> 214 <span>Search</span> 215 </button> 216 217 218 219 <a href="/packages/" class="text-brand-foreground/80 hover:text-brand-foreground hover:bg-brand-foreground/5 block rounded-md px-3 py-2 text-base font-medium transition-colors">Packages</a> 220 <a href="/grids/" class="text-brand-foreground/80 hover:text-brand-foreground hover:bg-brand-foreground/5 block rounded-md px-3 py-2 text-base font-medium transition-colors">Grids</a> 221 222 <form method="post" action="/auth/login/github/"> 223 <input type="hidden" name="csrfmiddlewaretoken" value="jQXzLk797Dmvfv9l011FvACLAqffs63O2yUuU4xM4DZV15IcgnQdRyNohl4XadqD"> 224 <button type="submit" class="text-brand-foreground/80 hover:text-brand-foreground hover:bg-brand-foreground/5 block w-full rounded-md px-3 py-2 text-left text-base font-medium transition-colors">Log In</button> 225 </form> 226 227 </nav> 228 </div> 229 </div> 230</header> 231 232 233 234 <!-- Search Modal (Command Palette Style) --> 235 <div 236 id="search-modal" 237 class="pointer-events-auto fixed inset-0 z-50 hidden" 238 aria-hidden="true" 239 > 240 <div 241 data-search-modal-backdrop 242 class="pointer-events-auto absolute inset-0 bg-black/40 opacity-0 backdrop-blur-sm transition-opacity duration-150 ease-out" 243 ></div> 244 <div class="pointer-events-none relative flex items-start justify-center px-4 pt-8 pb-6 sm:pt-12"> 245 <div 246 id="search-modal-panel" 247 role="dialog" 248 aria-modal="true" 249 aria-labelledby="search-modal-title" 250 class="border-border/50 bg-background pointer-events-auto w-full max-w-2xl scale-95 rounded-2xl border opacity-0 shadow-2xl transition duration-150 ease-out" 251 > 252 <h2 id="search-modal-title" class="sr-only">Search</h2> 253 <div class="p-3 sm:p-4"> 254 <!-- Search Bar --> 255 <div class="group"> 256 <div class="relative"> 257 <i 258 class="ph-bold ph-magnifying-glass text-muted-foreground pointer-events-none absolute top-1/2 left-4 -translate-y-1/2 transform text-xl" 259 ></i> 260 <input 261 id="modal-search-input" 262 type="text" 263 name="q" 264 placeholder="Search Django packages..." 265 class="border-input bg-background text-foreground placeholder:text-muted-foreground focus:border-primary h-14 w-full rounded-xl border-2 py-4 pr-20 pl-12 text-lg transition-colors focus:outline-none" 266 autocomplete="off" 267 hx-get="/search/suggestions/" 268 hx-trigger="input changed delay:300ms, focus"
269 hx-target="#modal-suggestions-dropdown" 270 hx-vals='{"dropdown_id": "modal-suggestions-dropdown"}' 271 hx-indicator="#modal-search-spinner" 272 /> 273 <div 274 class="pointer-events-none absolute top-1/2 right-4 flex -translate-y-1/2 transform items-center space-x-2" 275 > 276 <div id="modal-search-spinner" class="htmx-indicator"> 277 <i class="ph-bold ph-circle-notch text-muted-foreground animate-spin"></i> 278 </div> 279 <kbd class="text-muted-foreground bg-muted/50 border-border hidden items-center rounded border px-2 py-1 text-xs sm:inline-flex"> 280 Esc 281 </kbd> 282 </div> 283 </div> 284 285 <!-- Suggestions Panel --> 286 <div 287 id="modal-suggestions-dropdown" 288 class="border-border/60 bg-background dark:bg-popover dark:border-border mt-3 hidden overflow-hidden rounded-xl border shadow-xl empty:hidden data-[open=true]:block dark:inset-shadow-[0_1px_0_0_oklch(1_0_0/0.08)] dark:shadow-black/60" 289 ></div> 290 </div> 291 </div> 292 </div> 293 </div> 294 </div> 295 296 297 298 299 300 <main class="flex-1"> 301 302 <!-- Breadcrumb Section --> 303 <section class="bg-primary/10 py-4"> 304 <div class="container mx-auto px-4"> 305 <div class="flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"> 306 <div class="text-muted-foreground flex items-center text-sm"> 307 <a href="/" class="hover:underline">Home</a> 308 <span class="mx-2">»</span> 309 <span class="text-foreground truncate font-medium">Grids</span> 310 </div> 311 <div class="flex w-full flex-wrap items-center gap-2 lg:w-auto"> 312 313 </div> 314 </div> 315 </div> 316 </section> 317 318 <div class="container mx-auto px-4 py-8"> 319 <div class="mb-8"> 320 <h1 class="text-foreground text-3xl font-bold">Grids</h1> 321 <p class="text-muted-foreground pt-2">Browse and search grids</p> 322 </div> 323 324 325 326 327 <div class="ethicalads-slot my-4" data-ethicalads-slot hidden> 328 <div class="flex justify-center"> 329 <div 330 class="flat" 331 data-ea-publisher="djangopackagesorg" 332 id="grids-list-inline" 333 data-ea-type="text" 334 ></div> 335 </div> 336 </div> 337 338 339 340 <div class="card"> 341 <div class="card-content p-6"> 342 <!-- Search Input --> 343 <div class="relative"> 344 <i class="ph-bold ph-magnifying-glass text-muted-foreground absolute top-1/2 left-3.5 -translate-y-1/2 text-lg"></i> 345 <input type="text" 346 name="q" 347 class="bg-background text-foreground focus:ring-primary h-12 w-full rounded-lg border pr-4 pl-11 shadow-sm transition-shadow focus:ring-2 focus:outline-none" 348 placeholder="Search grids..." 349 value="" 350 hx-get="/grids/" 351 hx-trigger="input changed delay:300ms" 352 hx-target="#grid-list-container" 353 hx-indicator="#grid-list-spinner" 354 hx-include="#grid-list-state input" 355 hx-push-url="true"> 356 </div> 357 </div> 358 </div> 359 360 <div class="card relative mt-6"> 361 <div id="grid-list-spinner" class="htmx-indicator bg-background/50 pointer-events-none absolute inset-0 z-10 flex items-center justify-center rounded-xl backdrop-blur-[1px]"> 362 <i class="ph-bold ph-circle-notch text-primary animate-spin text-4xl"></i> 363 </div> 364 <div class="card-content p-6"> 365 <div id="grid-list-container"> 366 367 368<div id="grid-list-state" class="hidden"> 369 <input type="hidden" name="sort" value="-modified"> 370</div> 371 372<!-- Table --> 373<div class="w-full overflow-x-auto"> 374 <table class="w-full text-left text-sm"> 375 <thead> 376 <tr class="border-b text-left"> 377 <th class="text-muted-foreground pr-6 pb-3 font-medium"> 378 <button class="hover:text-foreground flex items-center gap-1" 379 hx-get="/grids/?sort=title&q=" 380 hx-target="#grid-list-container" 381 hx-push-url="true" hx-indicator="#grid-list-spinner"> 382 <i class="ph-bold ph-squares-four text-lg"></i> 383 Title 384 385 <i class="ph-bold ph-caret-up-down opacity-50"></i> 386 387 </button> 388 </th> 389 <th class="text-muted-foreground hidden pb-3 font-medium md:table-cell"> 390 <button class="hover:text-foreground flex items-center gap-1" 391 hx-get="/grids/?sort=-gridpackage_count&q=" 392 hx-target="#grid-list-container" 393 hx-push-url="true" hx-indicator="#grid-list-spinner"> 394 <i class="ph-bold ph-package text-lg"></i> 395 Total Packages 396 397 <i class="ph-bold ph-caret-up-down opacity-50"></i> 398 399 </button> 400 </th> 401 <th class="text-muted-foreground hidden pb-3 font-medium lg:table-cell"> 402 <button class="hover:text-foreground flex items-center gap-1" 403 hx-get="/grids/?sort=-active_gridpackage_count&q=" 404 hx-target="#grid-list-container" 405 hx-push-url="true" hx-indicator="#grid-list-spinner"> 406 <i class="ph-bold ph-package text-lg"></i> 407 Active Packages 408 409 <i class="ph-bold ph-caret-up-down opacity-50"></i> 410 411 </button> 412 </th> 413 <th class="text-muted-foreground hidden pb-3 font-medium lg:table-cell"> 414 <div class="flex items-center gap-1"> 415 <i class="ph-bold ph-list-checks text-lg"></i> 416 Features 417 </div> 418 </th> 419 <th class="text-muted-foreground pb-3 font-medium"> 420 <button class="hover:text-foreground flex items-center gap-1" 421 hx-get="/grids/?sort=modified&q=" 422 hx-target="#grid-list-container" 423 hx-push-url="true" hx-indicator="#grid-list-spinner"> 424 <i class="ph-bold ph-clock text-lg"></i> 425 Updated 426 427 <i class="ph-bold ph-caret-down"></i> 428 429 </button> 430 </th> 431 </tr> 432 </thead> 433 <tbody> 434 435 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 436 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 437 <div class="flex flex-col"> 438 <a href="/grids/g/javascript-tooling/" class="text-primary block truncate text-base font-semibold hover:underline" title="JavaScript Tooling">JavaScript Tooling</a> 439 <p class="text-muted-foreground mt-1 truncate text-xs" title="Packages that connect the JavaScript ecosystem to your Django project.">Packages that connect the JavaScript ecosystem to your Django project.</p> 440 441 <!-- Mobile Badges --> 442 <div class="mt-2 flex flex-wrap gap-2 md:hidden">
443 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 444 <i class="ph-bold ph-package mr-1"></i> 7 445 </span> 446 </div> 447 </div> 448 </td> 449 <td class="hidden py-3 font-mono text-sm md:table-cell"> 450 7 451 </td> 452 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 453 7 454 </td> 455 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 456 5 457 </td> 458 <td class="text-muted-foreground py-3 text-sm"> 459 Jul 02, 2026 460 </td> 461 </tr> 462 463 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 464 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 465 <div class="flex flex-col"> 466 <a href="/grids/g/solana/" class="text-primary block truncate text-base font-semibold hover:underline" title="Solana">Solana</a> 467 <p class="text-muted-foreground mt-1 truncate text-xs" title="Comparison of packages for the Solana blockchain.">Comparison of packages for the Solana blockchain.</p> 468 469 <!-- Mobile Badges --> 470 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 471 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 472 <i class="ph-bold ph-package mr-1"></i> 1 473 </span> 474 </div> 475 </div> 476 </td> 477 <td class="hidden py-3 font-mono text-sm md:table-cell"> 478 1 479 </td> 480 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 481 1 482 </td> 483 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 484 0 485 </td> 486 <td class="text-muted-foreground py-3 text-sm"> 487 Feb 15, 2026 488 </td> 489 </tr> 490 491 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 492 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 493 <div class="flex flex-col"> 494 <a href="/grids/g/task-framework/" class="text-primary block truncate text-base font-semibold hover:underline" title="Task Framework">Task Framework</a> 495 <p class="text-muted-foreground mt-1 truncate text-xs" title="Projects implementing Django'
495s Tasks Framework 496 497https://docs.djangoproject.com/en/6.0/topics/tasks/">Projects implementing Django's Tasks Framework 498 499https://docs.djangoproject.com/en/6.0/topics/tasks/</p> 500 501 <!-- Mobile Badges --> 502 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 503 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 504 <i class="ph-bold ph-package mr-1"></i> 13 505 </span> 506 </div> 507 </div> 508 </td> 509 <td class="hidden py-3 font-mono text-sm md:table-cell"> 510 13 511 </td> 512 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 513 13 514 </td> 515 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 516 0 517 </td> 518 <td class="text-muted-foreground py-3 text-sm"> 519 Dec 13, 2025 520 </td> 521 </tr> 522 523 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 524 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 525 <div class="flex flex-col"> 526 <a href="/grids/g/blog/" class="text-primary block truncate text-base font-semibold hover:underline" title="Blog">Blog</a> 527 <p class="text-muted-foreground mt-1 truncate text-xs" title="A blog app is designed to facilitate the creation, publishing, and management of blog content, typically featuring articles, posts, and categories.">A blog app is designed to facilitate the creation, publishing, and management of blog content, typically featuring articles, posts, and categories.</p> 528 529 <!-- Mobile Badges --> 530 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 531 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 532 <i class="ph-bold ph-package mr-1"></i> 18 533 </span> 534 </div> 535 </div> 536 </td> 537 <td class="hidden py-3 font-mono text-sm md:table-cell"> 538 57 539 </td> 540 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 541 18 542 </td> 543 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 544 29 545 </td> 546 <td class="text-muted-foreground py-3 text-sm"> 547 Nov 14, 2025 548 </td> 549 </tr> 550 551 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 552 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 553 <div class="flex flex-col"> 554 <a href="/grids/g/mcp/" class="text-primary block truncate text-base font-semibold hover:underline" title="Model Context Protocol (MCP)">Model Context Protocol (MCP)</a> 555 <p class="text-muted-foreground mt-1 truncate text-xs" title="Packages and tools that implement or support the Model Context Protocol, a standard for connecting language models to external data and actions. These projects help Django developers exp
555ose structured context, tools, and resources to LLMs in a consistent way.">Packages and tools that implement or support the Model Context Protocol, a standard for connecting language models to external data and actions. These projects help Django developers expose structured context, tools, and resources to LLMs in a consistent way.</p> 556 557 <!-- Mobile Badges --> 558 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 559 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 560 <i class="ph-bold ph-package mr-1"></i> 8 561 </span> 562 </div> 563 </div> 564 </td> 565 <td class="hidden py-3 font-mono text-sm md:table-cell"> 566 8 567 </td> 568 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 569 8 570 </td> 571 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 572 0 573 </td> 574 <td class="text-muted-foreground py-3 text-sm"> 575 Nov 13, 2025 576 </td> 577 </tr> 578 579 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 580 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 581 <div class="flex flex-col"> 582 <a href="/grids/g/async/" class="text-primary block truncate text-base font-semibold hover:underline" title="async">async</a> 583 <p class="text-muted-foreground mt-1 truncate text-xs" title="packages adding async support to various django related subjects">packages adding async support to various django related subjects</p> 584 585 <!-- Mobile Badges --> 586 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 587 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 588 <i class="ph-bold ph-package mr-1"></i> 1 589 </span> 590 </div> 591 </div> 592 </td> 593 <td class="hidden py-3 font-mono text-sm md:table-cell"> 594 1 595 </td> 596 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 597 1 598 </td> 599 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 600 0 601 </td> 602 <td class="text-muted-foreground py-3 text-sm"> 603 Sep 06, 2025 604 </td> 605 </tr> 606 607 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 608 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 609 <div class="flex flex-col"> 610 <a href="/grids/g/rate-limiting/" class="text-primary block truncate text-base font-semibold hover:underline" title="rate-limiting">rate-limiting</a> 611 <p class="text-muted-foreground mt-1 truncate text-xs" title="rate-limiting">rate-limiting</p> 612 613 <!-- Mobile Badges --> 614 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 615 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 616 <i class="ph-bold ph-package mr-1"></i> 2 617 </span> 618 </div> 619 </div> 620 </td> 621 <td class="hidden py-3 font-mono text-sm md:table-cell"> 622 2 623 </td> 624 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 625 2 626 </td> 627 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 628 0 629 </td> 630 <td class="text-muted-foreground py-3 text-sm"> 631 Jul 12, 2025 632 </td> 633 </tr> 634 635 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 636 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 637 <div class="flex flex-col"> 638 <a href="/grids/g/throttling/" class="text-primary block truncate text-base font-semibold hover:underline" title="throttling">throttling</a> 639 <p class="text-muted-foreground mt-1 truncate text-xs" title="throttling">throttling</p> 640 641 <!-- Mobile Badges --> 642 <div class="mt-2 flex flex-wrap gap-2 md:hidden">
643 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 644 <i class="ph-bold ph-package mr-1"></i> 2 645 </span> 646 </div> 647 </div> 648 </td> 649 <td class="hidden py-3 font-mono text-sm md:table-cell"> 650 2 651 </td> 652 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 653 2 654 </td> 655 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 656 0 657 </td> 658 <td class="text-muted-foreground py-3 text-sm"> 659 Jul 12, 2025 660 </td> 661 </tr> 662 663 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 664 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 665 <div class="flex flex-col"> 666 <a href="/grids/g/ai/" class="text-primary block truncate text-base font-semibold hover:underline" title="AI">AI</a> 667 <p class="text-muted-foreground mt-1 truncate text-xs" title="Django apps to facilitate integration of Artificial Intelligence features.">Django apps to facilitate integration of Artificial Intelligence features.</p> 668 669 <!-- Mobile Badges --> 670 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 671 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 672 <i class="ph-bold ph-package mr-1"></i> 9 673 </span> 674 </div> 675 </div> 676 </td> 677 <td class="hidden py-3 font-mono text-sm md:table-cell"> 678 9 679 </td> 680 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 681 9 682 </td> 683 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 684 0 685 </td> 686 <td class="text-muted-foreground py-3 text-sm"> 687 Jul 09, 2025 688 </td> 689 </tr> 690 691 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 692 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 693 <div class="flex flex-col"> 694 <a href="/grids/g/ticketing/" class="text-primary block truncate text-base font-semibold hover:underline" title="Ticketing">Ticketing</a> 695 <p class="text-muted-foreground mt-1 truncate text-xs" title="To-do systems and ticket managers.">To-do systems and ticket managers.</p> 696 697 <!-- Mobile Badges --> 698 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 699 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 700 <i class="ph-bold ph-package mr-1"></i> 3 701 </span> 702 </div> 703 </div> 704 </td> 705 <td class="hidden py-3 font-mono text-sm md:table-cell"> 706 10 707 </td> 708 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 709 3 710 </td> 711 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 712 22 713 </td> 714 <td class="text-muted-foreground py-3 text-sm"> 715 Jul 09, 2025 716 </td> 717 </tr> 718 719 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 720 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 721 <div class="flex flex-col"> 722 <a href="/grids/g/admin-interface/" class="text-primary block truncate text-base font-semibold hover:underline" title="Admin interface">Admin interface</a> 723 <p class="text-muted-foreground mt-1 truncate text-xs" title="Ap
723ps related to the django admin interface.">Apps related to the django admin interface.</p> 724 725 <!-- Mobile Badges --> 726 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 727 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 728 <i class="ph-bold ph-package mr-1"></i> 67 729 </span> 730 </div> 731 </div> 732 </td> 733 <td class="hidden py-3 font-mono text-sm md:table-cell"> 734 148 735 </td> 736 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 737 67 738 </td> 739 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 740 15 741 </td> 742 <td class="text-muted-foreground py-3 text-sm"> 743 Mar 13, 2025 744 </td> 745 </tr> 746 747 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 748 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 749 <div class="flex flex-col"> 750 <a href="/grids/g/admin-styling/" class="text-primary block truncate text-base font-semibold hover:underline" title="Admin Styling">Admin Styling</a> 751 <p class="text-muted-foreground mt-1 truncate text-xs" title="Grid for packages that make django admin look different">Grid for packages that make django admin look different</p> 752 753 <!-- Mobile Badges --> 754 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 755 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 756 <i class="ph-bold ph-package mr-1"></i> 25 757 </span> 758 </div> 759 </div> 760 </td> 761 <td class="hidden py-3 font-mono text-sm md:table-cell"> 762 41 763 </td> 764 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 765 25 766 </td> 767 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 768 11 769 </td> 770 <td class="text-muted-foreground py-3 text-sm"> 771 Mar 06, 2025 772 </td> 773 </tr> 774 775 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 776 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 777 <div class="flex flex-col"> 778 <a href="/grids/g/label_printing/" class="text-primary block truncate text-base font-semibold hover:underline" title="Label Printing">Label Printing</a> 779 <p class="text-muted-foreground mt-1 truncate text-xs" title="Label printing">Label printing</p> 780 781 <!-- Mobile Badges --> 782 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 783 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 784 <i class="ph-bold ph-package mr-1"></i> 2 785 </span> 786 </div> 787 </div> 788 </td> 789 <td class="hidden py-3 font-mono text-sm md:table-cell"> 790 2 791 </td> 792 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 793 2 794 </td> 795 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 796 0 797 </td> 798 <td class="text-muted-foreground py-3 text-sm"> 799 Jan 22, 2025 800 </td> 801 </tr> 802 803 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 804 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 805 <div class="flex flex-col"> 806 <a href="/grids/g/clinical_trials/" class="text-primary block truncate text-base font-semibold hover:underline" title="Clinical Trials">Clinical Trials</a> 807 <p class="text-muted-foreground mt-1 truncate text-xs" title="Clinical trials data management">Clinical trials data management</p> 808 809 <!-- Mobile Badges --> 810 <div class="mt-2 flex flex-wrap gap-2 md:hidden">
811 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 812 <i class="ph-bold ph-package mr-1"></i> 1 813 </span> 814 </div> 815 </div> 816 </td> 817 <td class="hidden py-3 font-mono text-sm md:table-cell"> 818 1 819 </td> 820 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 821 1 822 </td> 823 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 824 0 825 </td> 826 <td class="text-muted-foreground py-3 text-sm"> 827 Jan 22, 2025 828 </td> 829 </tr> 830 831 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 832 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 833 <div class="flex flex-col"> 834 <a href="/grids/g/django-ninja/" class="text-primary block truncate text-base font-semibold hover:underline" title="Django Ninja">Django Ninja</a> 835 <p class="text-muted-foreground mt-1 truncate text-xs" title="A grid of third-party packages for the Django Ninja REST Framework.">A grid of third-party packages for the Django Ninja REST Framework.</p> 836 837 <!-- Mobile Badges --> 838 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 839 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 840 <i class="ph-bold ph-package mr-1"></i> 10 841 </span> 842 </div> 843 </div> 844 </td> 845 <td class="hidden py-3 font-mono text-sm md:table-cell"> 846 11 847 </td> 848 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 849 10 850 </td> 851 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 852 0 853 </td> 854 <td class="text-muted-foreground py-3 text-sm"> 855 Aug 07, 2024 856 </td> 857 </tr> 858 859 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 860 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 861 <div class="flex flex-col"> 862 <a href="/grids/g/threadlocal-user-middleware/" class="text-primary block truncate text-base font-semibold hover:underline" title="Threadlocal User Middleware">Threadlocal User Middleware</a> 863 <p class="text-muted-foreground mt-1 truncate text-xs" title="Threadlocal User Middleware provides a way to access the current user deep within contexts where it might not be possible to pass the user down into the stack, e.g. filtering or logging.">Threadlocal User Middleware provides a way to access the current user deep within contexts where it might not be possible to pass the user down into the stack, e.g. filtering or logging.</p> 864 865 <!-- Mobile Badges --> 866 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 867 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 868 <i class="ph-bold ph-package mr-1"></i> 1 869 </span> 870 </div> 871 </div> 872 </td> 873 <td class="hidden py-3 font-mono text-sm md:table-cell"> 874 4 875 </td> 876 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 877 1 878 </td> 879 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 880 1 881 </td> 882 <td class="text-muted-foreground py-3 text-sm"> 883 Jul 09, 2024 884 </td> 885 </tr> 886 887 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 888 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 889 <div class="flex flex-col"> 890 <a href="/grids/g/anti-spam/" class="text-primary block truncate text-base font-semibold hover:underline" title="Anti spam">Anti spam</a> 891 <p class="text-muted-foreground mt-1 truncate text-xs" title="This grid contains apps which reduce spam.">This grid contains apps which reduce spam.</p> 892 893 <!-- Mobile Badges --> 894 <div class="mt-2 flex flex-wrap gap-2 md:hidden">
895 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 896 <i class="ph-bold ph-package mr-1"></i> 4 897 </span> 898 </div> 899 </div> 900 </td> 901 <td class="hidden py-3 font-mono text-sm md:table-cell"> 902 13 903 </td> 904 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 905 4 906 </td> 907 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 908 6 909 </td> 910 <td class="text-muted-foreground py-3 text-sm"> 911 May 07, 2024 912 </td> 913 </tr> 914 915 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 916 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 917 <div class="flex flex-col"> 918 <a href="/grids/g/nosql/" class="text-primary block truncate text-base font-semibold hover:underline" title="NoSQL">NoSQL</a> 919 <p class="text-muted-foreground mt-1 truncate text-xs" title="This is a grid of non-relational database backends.">This is a grid of non-relational database backends.</p> 920 921 <!-- Mobile Badges --> 922 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 923 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 924 <i class="ph-bold ph-package mr-1"></i> 3 925 </span> 926 </div> 927 </div> 928 </td> 929 <td class="hidden py-3 font-mono text-sm md:table-cell"> 930 13 931 </td> 932 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 933 3 934 </td> 935 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 936 65 937 </td> 938 <td class="text-muted-foreground py-3 text-sm"> 939 May 07, 2024 940 </td> 941 </tr> 942 943 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 944 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 945 <div class="flex flex-col"> 946 <a href="/grids/g/feature-flip/" class="text-primary block truncate text-base font-semibold hover:underline" title="Feature Flipping">Feature Flipping</a> 947 <p class="text-muted-foreground mt-1 truncate text-xs" title="Evaluate apps and libraries that enable us to flip features for users">Evaluate apps and libraries that enable us to flip features for users</p> 948 949 <!-- Mobile Badges --> 950 <div class="mt-2 flex flex-wrap gap-2 md:hidden"> 951 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 952 <i class="ph-bold ph-package mr-1"></i> 4 953 </span> 954 </div> 955 </div> 956 </td> 957 <td class="hidden py-3 font-mono text-sm md:table-cell"> 958 16 959 </td> 960 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 961 4 962 </td> 963 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 964 15 965 </td> 966 <td class="text-muted-foreground py-3 text-sm"> 967 May 07, 2024 968 </td> 969 </tr> 970 971 <tr class="hover:bg-muted/30 border-b transition-colors last:border-0"> 972 <td class="max-w-[10rem] py-3 pr-6 sm:max-w-[15rem] md:max-w-[20rem]"> 973 <div class="flex flex-col"> 974 <a href="/grids/g/mongodb/" class="text-primary block truncate text-base font-semibold hover:underline" title="MongoDB">MongoDB</a> 975 <p class="text-muted-foreground mt-1 truncate text-xs" title="Packages that help you tie MongoDB into Django.">Packages that help you tie MongoDB into Django.</p> 976 977 <!-- Mobile Badges --> 978 <div class="mt-2 flex flex-wrap gap-2 md:hidden">
979 <span class="bg-muted text-muted-foreground inline-flex items-center rounded px-2 py-0.5 text-xs font-medium" title="Packages"> 980 <i class="ph-bold ph-package mr-1"></i> 4 981 </span> 982 </div> 983 </div> 984 </td> 985 <td class="hidden py-3 font-mono text-sm md:table-cell"> 986 21 987 </td> 988 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 989 4 990 </td> 991 <td class="hidden py-3 font-mono text-sm lg:table-cell"> 992 3 993 </td> 994 <td class="text-muted-foreground py-3 text-sm"> 995 May 03, 2024 996 </td> 997 </tr> 998 999 </tbody> 1000 </table> 1001</div> 1002 1003<!-- Pagination --> 1004 1005 <div class="mt-8 flex justify-center"> 1006 <div class="inline-flex flex-wrap items-center gap-1"> 1007 <button 1008 1009 disabled 1010 1011 class="border-input bg-background hover:bg-accent hover:text-accent-foreground inline-flex h-9 items-center justify-center rounded-md border px-2 text-sm font-medium whitespace-nowrap transition-colors disabled:pointer-events-none disabled:opacity-50 sm:px-3"> 1012 <i class="ph-bold ph-caret-left mr-1"></i> 1013 <span class="hidden sm:inline">Previous</span> 1014 </button> 1015 1016 <div class="inline-flex items-center gap-1"> 1017 1018 1019 <button 1020 class="bg-primary text-primary-foreground inline-flex h-9 w-9 items-center justify-center rounded-md text-sm font-medium whitespace-nowrap transition-colors"> 1021 1 1022 </button> 1023 1024 1025 1026 <button 1027 hx-get="/grids/?page=2&sort=-modified&q=" 1028 hx-target="#grid-list-container" 1029 hx-push-url="true" hx-indicator="#grid-list-spinner" 1030 class="border-input bg-background hover:bg-accent hover:text-accent-foreground inline-flex h-9 w-9 items-center justify-center rounded-md border text-sm font-medium whitespace-nowrap transition-colors"> 1031 2 1032 </button> 1033 1034 1035 1036 <button 1037 hx-get="/grids/?page=3&sort=-modified&q=" 1038 hx-target="#grid-list-container" 1039 hx-push-url="true" hx-indicator="#grid-list-spinner" 1040 class="border-input bg-background hover:bg-accent hover:text-accent-foreground inline-flex h-9 w-9 items-center justify-center rounded-md border text-sm font-medium whitespace-nowrap transition-colors"> 1041 3 1042 </button> 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 </div> 1078 1079 <button 1080 1081 hx-get="/grids/?page=2&sort=-modified&q=" 1082 hx-target="#grid-list-container" 1083 hx-push-url="true" hx-indicator="#grid-list-spinner" 1084 1085 class="border-input bg-background hover:bg-accent hover:text-accent-foreground inline-flex h-9 items-center justify-center rounded-md border px-2 text-sm font-medium whitespace-nowrap transition-colors disabled:pointer-events-none disabled:opacity-50 sm:px-3">
1086 <span class="hidden sm:inline">Next</span> 1087 <i class="ph-bold ph-caret-right ml-1"></i> 1088 </button> 1089 </div> 1090 </div> 1091 1092 1093 </div> 1094 </div> 1095 </div> 1096 </div> 1097 1098 </main> 1099 1100<!-- Footer --> 1101<footer class="text-brand-foreground"> 1102 <div class="pt-8 pb-4" style="background-color: oklch(39.3% 0.095 152.535)"> 1103 <div class="container mx-auto px-4 text-center"> 1104 <p class="text-sm"> 1105 Projects listed on Django Packages are third-party packages. They are not vetted nor endorsed by the Django Software Foundation. Use them at your own risk. 1106 </p> 1107 </div> 1108 </div> 1109 <div class="bg-brand pt-4 pb-8"> 1110 <div class="container mx-auto px-4"> 1111 <div class="flex flex-wrap justify-center gap-6 text-sm"> 1112 <a 1113 href="https://github.com/djangopackages/djangopackages" 1114 class="flex items-center gap-2 opacity-90 hover:opacity-100" 1115 > 1116 <i class="ph-bold ph-github-logo"></i> 1117 Repo 1118 </a> 1119 <a href="/faq/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1120 <i class="ph-bold ph-question"></i> 1121 FAQ 1122 </a> 1123 <a href="/terms/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1124 <i class="ph-bold ph-file-text"></i> 1125 Terms 1126 </a> 1127 <a href="/acceptable-use/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1128 <i class="ph-bold ph-shield-check"></i> 1129 Acceptable Use 1130 </a> 1131 <a 1132 href="https://docs.djangopackages.org/en/latest/contributing/" 1133 class="flex items-center gap-2 opacity-90 hover:opacity-100" 1134 > 1135 <i class="ph-bold ph-git-pull-request"></i> 1136 Contribute 1137 </a> 1138 <a href="/api/v4/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1139 <i class="ph-bold ph-plugs"></i> 1140 API 1141 </a> 1142 <a href="/syndication/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1143 <i class="ph-bold ph-rss"></i> 1144 RSS / Atom 1145 </a> 1146 <a href="/changelog/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1147 <i class="ph-bold ph-list-dashes"></i> 1148 Changelog 1149 </a> 1150 <a href="/funding/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1151 <i class="ph-bold ph-heart"></i> 1152 Funding 1153 </a> 1154 <a href="/readiness/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1155 <i class="ph-bold ph-file-py"></i> 1156 Readiness 1157 </a> 1158 <a href="https://djangojobboard.com" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1159 <i class="ph-bold ph-briefcase"></i> 1160 Django Job Board 1161 </a> 1162 <a href="https://django-news.com/" class="flex items-center gap-2 opacity-90 hover:opacity-100"> 1163 <i class="ph-bold ph-newspaper"></i> 1164 Django News Newsletter 1165 </a> 1166 </div> 1167 1168 <div class="text-center text-sm opacity-90"> 1169 <p> 1170 © 2010-2026 <a href="https://github.com/djangopackages/djangopackages/graphs/contributors" class="hover:underline">Contributors</a>, 1171 1172 2010-2021 funded by <a href="https://www.feldroy.com/tech" class="hover:underline">Two Scoops Press</a>, an imprint of <a href="https://www.feldroy.com/" class="hover:underline">Feldroy</a>.<br> 1173 Originally developed by <a href="http://daniel.feldroy.com" class="hover:underline">Daniel Roy Greenfeld</a> & <a href="https://audrey.feldroy.com/" class="hover:underline">Audrey Roy Greenfeld</a>. 1174 1175 </p> 1176 <p class="mt-2">
1177 Thank you to our <a href="https://github.com/djangopackages/djangopackages/graphs/contributors" class="hover:underline">maintainers and contributors</a> and to <a href="https://www.revsys.com/" class="hover:underline">REVSYS</a> for sponsoring development. 1178 </p> 1179 <p class="mt-2"> 1180 Special thanks to <a href="https://djangonaut.space" class="hover:underline">Djangonaut Space</a>. 1181 </p> 1182 <p class="mt-2"> 1183 Hosted on Hetzner. 1184 <a href="https://hetzner.cloud/?ref=R4fnKzKtBqFn" class="hover:underline">Please use our referral link to receive a free $20 credit to get you started.</a> 1185 </p> 1186 </div> 1187 </div> 1188 </div> 1189</footer> 1190 1191 1192
1192<script src="/static/js/app.js"></script>
1192 1193
1193<script src="/static/js/htmx.min.js" defer></script>
1193 1194 1195
1195<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"509b980cf1254774ad4e5608e6c5e65a","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 1195
1195
1196<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a440e3107faea2a1',t:'MTc5MDkxNDUzNw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
1196</body> 1197</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.