{"id":92567,"date":"2025-01-12T03:04:40","date_gmt":"2025-01-11T23:34:40","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/"},"modified":"2025-01-12T03:04:40","modified_gmt":"2025-01-11T23:34:40","slug":"%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/","title":{"rendered":"\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 To-do \u0628\u0627 HTMX \u0648 Django\u060c \u0642\u0633\u0645\u062a 9: \u062c\u0633\u062a\u062c\u0648\u06cc \u0641\u0639\u0627\u0644"},"content":{"rendered":"<div data-article-id=\"2200983\" id=\"article-body\">\n<p>\u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f! \u062f\u0631 \u0628\u062e\u0634 9\u060c \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u062f\u06cc\u06af\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0686\u06af\u0648\u0646\u0647 HTMX \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062a\u062c\u0631\u0628\u0647 \u0648\u0628 \u063a\u0646\u06cc \u0631\u0627\u06cc\u062c \u0631\u0627 \u0628\u0627 \u06a9\u062f \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0645 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f: \u062c\u0633\u062a\u062c\u0648\u06cc \u0641\u0639\u0627\u0644.<\/p>\n<p>\u0646\u062a\u06cc\u062c\u0647 \u0627\u0631\u0633\u0627\u0644 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f <code>POST<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u062f <code>\/tasks\/search<\/code> \u0648 \u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u062f\u0631 \u0644\u06cc\u0633\u062a \u0639\u0648\u0636 \u06a9\u0646\u06cc\u062f. <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstumtup8jjay0eunfwhk.gif\" alt=\"\u062c\u0633\u062a\u062c\u0648\u06cc \u0641\u0639\u0627\u0644 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0631\u0647\u0627 \u0631\u0627 \u0628\u0627 \u062a\u0627\u06cc\u067e \u06a9\u0627\u0631\u0628\u0631 \u0641\u06cc\u0644\u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f\" loading=\"lazy\" width=\"784\" height=\"644\" data-animated=\"true\" title=\"\"><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_URL_%D9%88_%D9%86%D9%85%D8%A7%DB%8C%D8%B4\" >\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 URL \u0648 \u0646\u0645\u0627\u06cc\u0634<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86_%D9%88%D8%B1%D9%88%D8%AF%DB%8C_%D8%AC%D8%B3%D8%AA%D8%AC%D9%88_%D8%AF%D8%B1_%D9%82%D8%A7%D9%84%D8%A8\" >\u0627\u0641\u0632\u0648\u062f\u0646 \u0648\u0631\u0648\u062f\u06cc \u062c\u0633\u062a\u062c\u0648 \u062f\u0631 \u0642\u0627\u0644\u0628<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#Testing_the_view\" >Testing the view<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C_%D8%AF%D8%B1_%D9%85%D9%88%D8%B1%D8%AF_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4_%D8%B2%D9%85%DB%8C%D9%86%D9%87_%D9%88_%D8%A7%D9%84%DA%AF%D9%88%D9%87%D8%A7\" >\u06cc\u0627\u062f\u062f\u0627\u0634\u062a\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u0632\u0645\u06cc\u0646\u0647 \u0648 \u0627\u0644\u06af\u0648\u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#%D8%AF%D8%B1_%D8%A7%D8%AF%D8%A7%D9%85%D9%87_%D8%A8%D8%AE%D9%88%D8%A7%D9%86%DB%8C%D8%AF\" >\u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C_%D9%88_%D8%AD%D9%84_%D8%AC%D9%84%D8%B3%D8%A7%D8%AA_%D9%85%D8%B3%D8%AF%D9%88%D8%AF_%D8%B4%D8%AF%D9%87_%D8%AF%D8%B1_%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87_%D8%AF%D8%A7%D8%AF%D9%87_%D8%A7%D9%88%D8%B1%D8%A7%DA%A9%D9%84\" >\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0648 \u062d\u0644 \u062c\u0644\u0633\u0627\u062a \u0645\u0633\u062f\u0648\u062f \u0634\u062f\u0647 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0648\u0631\u0627\u06a9\u0644<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1_Docker_%D8%AE%D9%88%D8%AF_%D8%B1%D8%A7_%D8%A8%D8%A7_Trivy_%D8%A7%DB%8C%D9%85%D9%86_%DA%A9%D9%86%DB%8C%D8%AF_%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C_%DA%AF%D8%A7%D9%85_%D8%A8%D9%87_%DA%AF%D8%A7%D9%85\" >\u062a\u0635\u0627\u0648\u06cc\u0631 Docker \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 Trivy \u0627\u06cc\u0645\u0646 \u06a9\u0646\u06cc\u062f: \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%A2%D9%BE%D9%84%D9%88%D8%AF_%D8%AA%D8%B5%D9%88%DB%8C%D8%B1_%D8%AF%D8%B1_React_Quill\" >\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u067e\u0644\u0648\u062f \u062a\u0635\u0648\u06cc\u0631 \u062f\u0631 React Quill<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-to-do-%d8%a8%d8%a7-htmx-%d9%88-django%d8%8c-%d9%82%d8%b3%d9%85%d8%aa-9-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d9%81\/#Lettuce_%E2%80%93_%DB%8C%DA%A9_%D9%85%D8%B4%D8%AA%D8%B1%DB%8C_%D8%AC%D8%A7%D9%88%D8%A7_Redis\" >Lettuce &#8211; \u06cc\u06a9 \u0645\u0634\u062a\u0631\u06cc \u062c\u0627\u0648\u0627 Redis<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_URL_%D9%88_%D9%86%D9%85%D8%A7%DB%8C%D8%B4\"><\/span>\n<p>  \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 URL \u0648 \u0646\u0645\u0627\u06cc\u0634<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u0628\u0647 \u06cc\u06a9 URL \u062c\u062f\u06cc\u062f \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645\u060c <code>\/tasks\/search<\/code>\u060c \u06a9\u0647 \u0627\u0644\u0641 \u062f\u0631\u06cc\u0627\u0641\u062a \u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f <code>POST<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0627 \u06cc\u06a9 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a <code>query<\/code>.<\/p>\n<p>\u062f\u0631 <code>core\/urls.py<\/code> \u0645\u0633\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"c1\"># core\/urls.py\n<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">django.urls<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">path<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">.<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">views<\/span>\n\n<span class=\"n\">urlpatterns<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n    <span class=\"nf\">path<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">views<\/span><span class=\"p\">.<\/span><span class=\"n\">index<\/span><span class=\"p\">,<\/span> <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">index<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span>\n    <span class=\"nf\">path<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">tasks\/<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">views<\/span><span class=\"p\">.<\/span><span class=\"n\">tasks<\/span><span class=\"p\">,<\/span> <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">tasks<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span>\n    <span class=\"nf\">path<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">tasks\/<task_id>\/toggle\/<\/task_id><\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">views<\/span><span class=\"p\">.<\/span><span class=\"n\">toggle_todo<\/span><span class=\"p\">,<\/span> <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">toggle_todo<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span>\n    <span class=\"nf\">path<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">tasks\/<task_id>\/<\/task_id><\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">views<\/span><span class=\"p\">.<\/span><span class=\"n\">task_details<\/span><span class=\"p\">,<\/span> <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">task_details<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span>\n    <span class=\"nf\">path<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">tasks\/<task_id>\/edit\/<\/task_id><\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">views<\/span><span class=\"p\">.<\/span><span class=\"n\">edit_task<\/span><span class=\"p\">,<\/span> <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">edit_task<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span>\n    <span class=\"nf\">path<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">tasks\/search\/<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">views<\/span><span class=\"p\">.<\/span><span class=\"n\">search<\/span><span class=\"p\">,<\/span> <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">search<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span> <span class=\"c1\"># &lt;-- NEW\n<\/span><span class=\"p\">]<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 <code>core\/views.py<\/code> \u0631\u0648\u0634 \u062c\u062f\u06cc\u062f \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"c1\"># core\/views.py\n<\/span>\n<span class=\"p\">...<\/span> <span class=\"n\">previous<\/span> <span class=\"n\">code<\/span>\n\n<span class=\"nd\">@login_required<\/span>\n<span class=\"nd\">@require_http_methods<\/span><span class=\"p\">([<\/span><span class=\"sh\">\"<\/span><span class=\"s\">POST<\/span><span class=\"sh\">\"<\/span><span class=\"p\">])<\/span>\n<span class=\"k\">def<\/span> <span class=\"nf\">search<\/span><span class=\"p\">(<\/span><span class=\"n\">request<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">query<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">POST<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">query<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">query<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">tasks<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">results<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"n\">todos<\/span><span class=\"p\">.<\/span><span class=\"nf\">filter<\/span><span class=\"p\">(<\/span><span class=\"n\">title__icontains<\/span><span class=\"o\">=<\/span><span class=\"n\">query<\/span><span class=\"p\">).<\/span><span class=\"nf\">order_by<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">-created_at<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">request<\/span><span class=\"p\">,<\/span>\n        <span class=\"sh\">\"<\/span><span class=\"s\">tasks.html#todo-items-partial<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">todos<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">results<\/span><span class=\"p\">},<\/span>\n        <span class=\"n\">status<\/span><span class=\"o\">=<\/span><span class=\"n\">HTTPStatus<\/span><span class=\"p\">.<\/span><span class=\"n\">OK<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0648\u0644\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u062c\u0627\u0644\u0628 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc \u062e\u0627\u0644\u06cc \u0627\u0633\u062a. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0641\u06cc\u0644\u062f \u062c\u0633\u062a\u062c\u0648 \u0631\u0627 \u067e\u0627\u06a9 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0628\u0647 \u0622\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0633\u06cc\u0631 \u062f\u0647\u06cc\u0645 <code>tasks<\/code> view\u060c \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0645\u0648\u0627\u0631\u062f \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f \u0648 \u0631\u0641\u062a\u0627\u0631 \u0627\u0633\u06a9\u0631\u0648\u0644 \u0646\u0627\u0645\u062d\u062f\u0648\u062f \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u062e\u0627\u0644\u06cc \u0646\u06cc\u0633\u062a\u060c \u0645\u0648\u0627\u0631\u062f \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0627 \u0641\u06cc\u0644\u062a\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>icontains<\/code>\u060c \u06a9\u0647 \u0628\u0647 \u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9 \u0648 \u0628\u0632\u0631\u06af \u062d\u0633\u0627\u0633 \u0646\u06cc\u0633\u062a \u0648 \u0645\u0648\u0627\u0631\u062f \u0645\u0646\u0637\u0628\u0642 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<p>\u06cc\u06a9 \u0628\u0627\u0631 \u062f\u06cc\u06af\u0631 \u0627\u0632 \u0627\u0644\u06af\u0648\u06cc \u062c\u0632\u0626\u06cc \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c <code>todo-items-partial<\/code>\u060c \u06a9\u0647 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647 \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86_%D9%88%D8%B1%D9%88%D8%AF%DB%8C_%D8%AC%D8%B3%D8%AA%D8%AC%D9%88_%D8%AF%D8%B1_%D9%82%D8%A7%D9%84%D8%A8\"><\/span>\n<p>  \u0627\u0641\u0632\u0648\u062f\u0646 \u0648\u0631\u0648\u062f\u06cc \u062c\u0633\u062a\u062c\u0648 \u062f\u0631 \u0642\u0627\u0644\u0628<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 <code>tasks.html<\/code> \u0642\u0627\u0644\u0628 \u06cc\u06a9 \u0648\u0631\u0648\u062f\u06cc \u062c\u062f\u06cc\u062f \u062f\u0631 \u0628\u0627\u0644\u0627\u06cc \u0635\u0641\u062d\u0647 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 url\/view \u062c\u062f\u06cc\u062f \u062e\u0648\u062f \u0648\u0635\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight jinja\"><code>\n..previous code\n\n  <span class=\"nt\"><div> <span class=\"na\">class=<\/span><span class=\"s\">\"w-full max-w-2xl\"<\/span><span class=\"nt\">&gt;<\/span>\n    <span class=\"nt\">\n\n\n\n<p>The code to fire the search url on change, with debouncing, is straight from the examples section of the official HTMX site. <\/p>\n\n<p>It's nice how self-explanatory the <code>hx-trigger<\/code> attribute reads: whenever the input is changed, with a delay (debounce) of 500 milliseconds, or when the ENTER key is pressed. <\/p>\n\n<p><code>hx-target<\/code> informs that we want to place the results in the <code>#todo-items<\/code> element (the <code>ul<\/code>), and since we want to change its children, we don't need to specify <code>hx-swap<\/code>, its default value is what we want already, <code>innerHTML<\/code>.<\/p>\n\n<p>While we're checking the code working,let's have a look in developer tools\/network, to see the requests being fired.<\/p>\n\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefciyazi93esoid1xhnc.gif\" alt=\"\u062c\u0633\u062a\u062c\u0648\u06cc \u0641\u0639\u0627\u0644 \u062f\u0631 \u0639\u0645\u0644\u060c \u0646\u0645\u0627\u06cc\u0634 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627 \u0648 \u067e\u0627\u0633\u062e\u200c\u0647\u0627 \u062f\u0631 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647\" loading=\"lazy\" width=\"958\" height=\"686\" data-animated=\"true\" title=\"\"><\/p>\n\n<h2><span class=\"ez-toc-section\" id=\"Testing_the_view\"><\/span>\n  \n  \n  Testing the view\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p>Let's add some tests to our new view, in <code>test_view_tasks.py<\/code><\/p>\n\n<p>The first test is our \"happy path\", we want to ensure we just return the items searched, which are two of the three fake items we have in the test. The other two test for no matches and empty searches.<br\/><\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"nd\">@pytest.mark.django_db<\/span>\n<span class=\"k\">def<\/span> <span class=\"nf\">test_search_filtering<\/span><span class=\"p\">(<\/span><span class=\"n\">client<\/span><span class=\"p\">,<\/span> <span class=\"n\">make_todo<\/span><span class=\"p\">,<\/span> <span class=\"n\">make_user<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">make_user<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">client<\/span><span class=\"p\">.<\/span><span class=\"nf\">force_login<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Todo 1<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Another Todo<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Something else<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"nf\">reverse<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">search<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span> <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">query<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Todo<\/span><span class=\"sh\">\"<\/span><span class=\"p\">})<\/span>\n    <span class=\"n\">content<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"p\">.<\/span><span class=\"n\">content<\/span><span class=\"p\">.<\/span><span class=\"nf\">decode<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"k\">assert<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Todo 1<\/span><span class=\"sh\">\"<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">content<\/span>\n    <span class=\"k\">assert<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Another Todo<\/span><span class=\"sh\">\"<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">content<\/span>\n\n    <span class=\"k\">assert<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Something else<\/span><span class=\"sh\">\"<\/span> <span class=\"ow\">not<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">content<\/span>\n\n<span class=\"nd\">@pytest.mark.django_db<\/span>\n<span class=\"k\">def<\/span> <span class=\"nf\">test_search_zero_matches_returns_empty_list<\/span><span class=\"p\">(<\/span><span class=\"n\">client<\/span><span class=\"p\">,<\/span> <span class=\"n\">make_todo<\/span><span class=\"p\">,<\/span> <span class=\"n\">make_user<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">make_user<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">client<\/span><span class=\"p\">.<\/span><span class=\"nf\">force_login<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Todo 1<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Another Todo<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Something else<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"nf\">reverse<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">search<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span> <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">query<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Nonexistent<\/span><span class=\"sh\">\"<\/span><span class=\"p\">})<\/span>\n    <span class=\"n\">content<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"p\">.<\/span><span class=\"n\">content<\/span><span class=\"p\">.<\/span><span class=\"nf\">decode<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"k\">assert<\/span> <span class=\"ow\">not<\/span> <span class=\"nf\">any<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">todo<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">content<\/span> <span class=\"k\">for<\/span> <span class=\"n\">todo<\/span> <span class=\"ow\">in<\/span> <span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Todo 1<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Another Todo<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Something else<\/span><span class=\"sh\">\"<\/span><span class=\"p\">]<\/span>\n    <span class=\"p\">)<\/span>\n\n<span class=\"nd\">@pytest.mark.django_db<\/span>\n<span class=\"k\">def<\/span> <span class=\"nf\">test_search_empty_query_redirects_to_all_tasks<\/span><span class=\"p\">(<\/span><span class=\"n\">client<\/span><span class=\"p\">,<\/span> <span class=\"n\">make_todo<\/span><span class=\"p\">,<\/span> <span class=\"n\">make_user<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">make_user<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">client<\/span><span class=\"p\">.<\/span><span class=\"nf\">force_login<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Todo 1<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Another Todo<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">make_todo<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Something else<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"o\">=<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"nf\">reverse<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">search<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span> <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">query<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"\"<\/span><span class=\"p\">})<\/span>\n    <span class=\"k\">assert<\/span> <span class=\"n\">response<\/span><span class=\"p\">.<\/span><span class=\"n\">status_code<\/span> <span class=\"o\">==<\/span> <span class=\"n\">HTTPStatus<\/span><span class=\"p\">.<\/span><span class=\"n\">FOUND<\/span>  <span class=\"c1\"># redirect\n<\/span>    <span class=\"k\">assert<\/span> <span class=\"n\">response<\/span><span class=\"p\">.<\/span><span class=\"n\">url<\/span> <span class=\"o\">==<\/span> <span class=\"nf\">reverse<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">tasks<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0646\u062c\u0627\u0645 \u0647\u0645\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062e\u0648\u0628 \u0627\u0633\u062a<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>\u276f uv run pytest\nTest session starts <span class=\"o\">(<\/span>platform: darwin, Python 3.12.8, pytest 8.3.4, pytest-sugar 1.0.0<span class=\"o\">)<\/span>\ndjango: version: 5.1.4, settings: todomx.settings <span class=\"o\">(<\/span>from ini<span class=\"o\">)<\/span>\nconfigfile: pyproject.toml\nplugins: sugar-1.0.0, django-4.9.0\ncollected 10 items\n\n core\/tests\/test_todo_model.py \u2713                                                                                                                                    10% \u2588\n core\/tests\/test_view_tasks.py \u2713\u2713\u2713\u2713\u2713\u2713\u2713\u2713\u2713                                                                                                                           100% \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n\nResults <span class=\"o\">(<\/span>0.53s<span class=\"o\">)<\/span>:\n      10 passed\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C_%D8%AF%D8%B1_%D9%85%D9%88%D8%B1%D8%AF_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4_%D8%B2%D9%85%DB%8C%D9%86%D9%87_%D9%88_%D8%A7%D9%84%DA%AF%D9%88%D9%87%D8%A7\"><\/span>\n<p>  \u06cc\u0627\u062f\u062f\u0627\u0634\u062a\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u0632\u0645\u06cc\u0646\u0647 \u0648 \u0627\u0644\u06af\u0648\u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u06a9\u0633\u06cc \u06a9\u0647 \u062a\u062c\u0631\u0628\u0647 \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0631 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u062c\u0646\u06af\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u062a\u0639\u062c\u0628 \u06a9\u0646\u062f \u06a9\u0647 \u0686\u0631\u0627 \u0645\u0627 \u0622\u0646 \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u06cc \u06a9\u0646\u06cc\u0645 <strong>\u0645\u062d\u062a\u0648\u0627<\/strong> \u0627\u0632 \u0627\u0644\u06af\u0648\u06cc \u0631\u0646\u062f\u0631 \u0634\u062f\u0647\u060c \u0648 \u0646\u0647 <strong>\u0632\u0645\u06cc\u0646\u0647<\/strong> \u062a\u0635\u0648\u06cc\u0628 \u0645\u06cc \u0634\u0648\u062f\u060c \u06a9\u0647 \u0642\u0627\u0637\u0639\u0627\u0646\u0647 \u062a\u0631 \u0627\u0633\u062a\u060c \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code>   <span class=\"bp\">...<\/span>\n   <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"nf\">reverse<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">search<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span> <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">query<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Todo<\/span><span class=\"sh\">\"<\/span><span class=\"p\">})<\/span>\n   <span class=\"n\">context<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"p\">.<\/span><span class=\"n\">context<\/span>\n\n   <span class=\"k\">assert<\/span> <span class=\"p\">{<\/span><span class=\"n\">todo<\/span><span class=\"p\">.<\/span><span class=\"n\">title<\/span> <span class=\"k\">for<\/span> <span class=\"n\">todo<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">context<\/span><span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">todos<\/span><span class=\"sh\">\"<\/span><span class=\"p\">]}<\/span> <span class=\"o\">==<\/span> <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Todo 1<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Another Todo<\/span><span class=\"sh\">\"<\/span><span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u06cc\u06a9 \u0645\u0634\u06a9\u0644 \u0641\u0639\u0644\u06cc \u062f\u0631 django-template-partials\u060c \u0634\u0645\u0627\u0631\u0647 54 \u0627\u0633\u062a \u06a9\u0647 \u0647\u0646\u0648\u0632 \u0628\u0631\u0637\u0631\u0641 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a (\u0645\u0646 \u0622\u0646 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u0645\u060c \u0627\u0645\u0627 \u0628\u06cc \u0627\u0647\u0645\u06cc\u062a \u0646\u06cc\u0633\u062a..) <\/p>\n<p>\u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647\u060c \u067e\u0627\u0633\u062e \u062d\u0627\u0648\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631\u06cc \u0628\u0631\u0627\u06cc <code>context<\/code> \u0648 <code>templates<\/code>.<\/p>\n<p>\u0628\u0647 \u0647\u0631 \u062d\u0627\u0644\u060c \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u0641\u0639\u0627\u0644 \u0627\u0633\u062a! \u062f\u0631 \u0645\u062c\u0645\u0648\u0639\u060c \u06a9\u062f \u0632\u06cc\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u0628\u0647\u0628\u0648\u062f \u0641\u0648\u0642 \u0627\u0644\u0639\u0627\u062f\u0647 \u062f\u0631 UX \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f. \u0637\u0628\u0642 \u0645\u0639\u0645\u0648\u0644 \u0646\u0633\u062e\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0627\u06cc\u0646 \u06a9\u062f \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0634\u0639\u0628\u0647 \u0622\u0646 https:\/\/github.com\/rodbv\/todo-mx\/tree\/part-9 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f. \u0628\u0647 \u0633\u0644\u0627\u0645\u062a\u06cc<\/p>\n<p>          <\/span><\/div>\n<nav class=\"series-switcher crayons-card crayons-card--secondary\">\n<\/nav>\n<p>        <\/span><\/code><\/div>\n<section class=\"crayons-card crayons-card--secondary text-padding mb-4 print-hidden\" id=\"bottom-content-read-next\">\n<h2 class=\"crayons-subtitle-1\"><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1_%D8%A7%D8%AF%D8%A7%D9%85%D9%87_%D8%A8%D8%AE%D9%88%D8%A7%D9%86%DB%8C%D8%AF\"><\/span>\u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"flex items-center\">\n          <span class=\"crayons-avatar crayons-avatar--xl m:crayons-avatar--2xl mr-4 shrink-0\"><br \/>\n              <img decoding=\"async\" loading=\"lazy\" alt=\"\u0639\u06a9\u0633 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 arvind_toorpu\" class=\"crayons-avatar__image\" width=\"100\" height=\"100\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=100,height=100,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1933970%2Ff4ee48ef-ebd9-4c2a-94c1-845642bf3996.png\" title=\"\"><br \/>\n          <\/span><\/p>\n<div>\n<h3 class=\"fs-xl mb-0 lh-tight\"><span class=\"ez-toc-section\" id=\"%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C_%D9%88_%D8%AD%D9%84_%D8%AC%D9%84%D8%B3%D8%A7%D8%AA_%D9%85%D8%B3%D8%AF%D9%88%D8%AF_%D8%B4%D8%AF%D9%87_%D8%AF%D8%B1_%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87_%D8%AF%D8%A7%D8%AF%D9%87_%D8%A7%D9%88%D8%B1%D8%A7%DA%A9%D9%84\"><\/span>\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0648 \u062d\u0644 \u062c\u0644\u0633\u0627\u062a \u0645\u0633\u062f\u0648\u062f \u0634\u062f\u0647 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0648\u0631\u0627\u06a9\u0644<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"opacity-75 pt-1\">\n<p>              \u0622\u0631\u0648\u06cc\u0646\u062f \u062a\u0648\u0631\u067e\u0648 &#8211; <time datetime=\"2025-01-11T20:19:42Z\">11 \u0698\u0627\u0646\u0648\u06cc\u0647<\/time>\n            <\/p>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"flex items-center\">\n          <span class=\"crayons-avatar crayons-avatar--xl m:crayons-avatar--2xl mr-4 shrink-0\"><br \/>\n              <img decoding=\"async\" loading=\"lazy\" alt=\"\u0639\u06a9\u0633 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 arunranu\" class=\"crayons-avatar__image\" width=\"100\" height=\"100\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=100,height=100,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2473899%2F9e20f371-9e19-472a-89af-f5bec08aba62.png\" title=\"\"><br \/>\n          <\/span><\/p>\n<div>\n<h3 class=\"fs-xl mb-0 lh-tight\"><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1_Docker_%D8%AE%D9%88%D8%AF_%D8%B1%D8%A7_%D8%A8%D8%A7_Trivy_%D8%A7%DB%8C%D9%85%D9%86_%DA%A9%D9%86%DB%8C%D8%AF_%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C_%DA%AF%D8%A7%D9%85_%D8%A8%D9%87_%DA%AF%D8%A7%D9%85\"><\/span>\u062a\u0635\u0627\u0648\u06cc\u0631 Docker \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 Trivy \u0627\u06cc\u0645\u0646 \u06a9\u0646\u06cc\u062f: \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"opacity-75 pt-1\">\n<p>              \u0622\u0631\u0648\u0646 \u06a9\u0648\u0645\u0627\u0631 &#8211; <time datetime=\"2025-01-11T19:19:12Z\">11 \u0698\u0627\u0646\u0648\u06cc\u0647<\/time>\n            <\/p>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"flex items-center\">\n          <span class=\"crayons-avatar crayons-avatar--xl m:crayons-avatar--2xl mr-4 shrink-0\"><br \/>\n              <img decoding=\"async\" loading=\"lazy\" alt=\"\u062a\u0635\u0648\u06cc\u0631 \u0646\u0645\u0627\u06cc\u0647 gitdeveloper\" class=\"crayons-avatar__image\" width=\"100\" height=\"100\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=100,height=100,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692661%2F47bbdde4-e547-4adb-9d47-e687745fe013.png\" title=\"\"><br \/>\n          <\/span><\/p>\n<div>\n<h3 class=\"fs-xl mb-0 lh-tight\"><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%A2%D9%BE%D9%84%D9%88%D8%AF_%D8%AA%D8%B5%D9%88%DB%8C%D8%B1_%D8%AF%D8%B1_React_Quill\"><\/span>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u067e\u0644\u0648\u062f \u062a\u0635\u0648\u06cc\u0631 \u062f\u0631 React Quill<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"opacity-75 pt-1\">\n<p>              \u06a9\u0627\u0631\u0628\u0631\u062f\u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc &#8211; <time datetime=\"2025-01-11T20:02:54Z\">11 \u0698\u0627\u0646\u0648\u06cc\u0647<\/time>\n            <\/p>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"flex items-center\">\n          <span class=\"crayons-avatar crayons-avatar--xl m:crayons-avatar--2xl mr-4 shrink-0\"><br \/>\n              <img decoding=\"async\" loading=\"lazy\" alt=\"\u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 said_olano\" class=\"crayons-avatar__image\" width=\"100\" height=\"100\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=100,height=100,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1173572%2F559076dd-fc31-431a-bd48-19ed5af74573.jpeg\" title=\"\"><br \/>\n          <\/span><\/p>\n<div>\n<h3 class=\"fs-xl mb-0 lh-tight\"><span class=\"ez-toc-section\" id=\"Lettuce_%E2%80%93_%DB%8C%DA%A9_%D9%85%D8%B4%D8%AA%D8%B1%DB%8C_%D8%AC%D8%A7%D9%88%D8%A7_Redis\"><\/span>Lettuce &#8211; \u06cc\u06a9 \u0645\u0634\u062a\u0631\u06cc \u062c\u0627\u0648\u0627 Redis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"opacity-75 pt-1\">\n<p>              \u0633\u0639\u06cc\u062f \u0627\u0648\u0644\u0627\u0646\u0648 &#8211; <time datetime=\"2025-01-11T20:03:15Z\">11 \u0698\u0627\u0646\u0648\u06cc\u0647<\/time>\n            <\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/section><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f! \u062f\u0631 \u0628\u062e\u0634 9\u060c \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u062f\u06cc\u06af\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0686\u06af\u0648\u0646\u0647 HTMX \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062a\u062c\u0631\u0628\u0647 \u0648\u0628 \u063a\u0646\u06cc \u0631\u0627\u06cc\u062c \u0631\u0627 \u0628\u0627 \u06a9\u062f \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0645 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f: \u062c\u0633\u062a\u062c\u0648\u06cc \u0641\u0639\u0627\u0644. \u0646\u062a\u06cc\u062c\u0647 \u0627\u0631\u0633\u0627\u0644 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f POST \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u062f \/tasks\/search \u0648 \u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u062f\u0631 \u0644\u06cc\u0633\u062a \u0639\u0648\u0636 \u06a9\u0646\u06cc\u062f. \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 URL \u0648 \u0646\u0645\u0627\u06cc\u0634 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":92568,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media2.dev.to\/dynamic\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh7skcbyykjqhtv8s444p.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-92567","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/92567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=92567"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/92567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/92568"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=92567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=92567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=92567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}