diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index a569318..04504e7 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -142,8 +142,8 @@ }, "profileSourceId": "7004edff-76db-412f-95d3-5fd8e180d055", "serial": { - "columns": 27, - "data": "\u001b[1C\u001b[38;5;231;2m \u001b[1C877\u001b[1C\u001b[22mPerson.objects.fi\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mlter(age=18).exis\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mts()\r\n\u001b[1C\u001b[2m \u001b[1C878\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m \u001b[1C879\r\n\u001b[1C \u001b[1C880\u001b[1C\u001b[22m###\u001b[1CField\u001b[1CLookups\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m (операторы\u001b[1Cпоиск\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mа)\r\n\u001b[1C\u001b[2m \u001b[1C881\r\n\u001b[1C \u001b[1C882\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m \u001b[1C883\u001b[1C\u001b[22m#\u001b[1CТочное\u001b[1Cсовпаден\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mие\r\n\u001b[1C\u001b[2m \u001b[1C884\u001b[1C\u001b[22mfilter(name__exac\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt=\"Ivan\")\r\n\u001b[1C\u001b[2m \u001b[1C885\u001b[1C\u001b[22mfilter(name__iexa\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mct=\"ivan\")\u001b[6C#\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m без\u001b[1Cучёта\u001b[1Cрегист\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mра\r\n\u001b[1C\u001b[2m \u001b[1C886\r\n\u001b[1C \u001b[1C887\u001b[1C\u001b[22m#\u001b[1CСравнение\u001b[1Cчисел\r\n\u001b[1C\u001b[2m \u001b[1C888\u001b[1C\u001b[22mfilter(age__gt=18\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m)\u001b[4C#\u001b[1C>\r\n\u001b[1C\u001b[2m \u001b[1C889\u001b[1C\u001b[22mfilter(age__gte=1\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m8)\u001b[3C#\u001b[1C>=\r\n\u001b[1C\u001b[2m \u001b[1C890\u001b[1C\u001b[22mfilter(age__lt=30\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m)\u001b[4C#\u001b[1C<\r\n\u001b[1C\u001b[2m \u001b[1C891\u001b[1C\u001b[22mfilter(age__lte=3\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m0)\u001b[3C#\u001b[1C<=\r\n\u001b[1C\u001b[2m \u001b[1C892\r\n\u001b[1C \u001b[1C893\u001b[1C\u001b[22m#\u001b[1CВхождение\r\n\u001b[1C\u001b[2m \u001b[1C894\u001b[1C\u001b[22mfilter(name__cont\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mains=\"van\")\r\n\u001b[1C\u001b[2m \u001b[1C895\u001b[1C\u001b[22mfilter(name__icon\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mtains=\"van\")\u001b[4C#\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m без\u001b[1Cучёта\u001b[1Cрегист\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mра\r\n\u001b[1C\u001b[2m \u001b[1C896\r\n\u001b[1C \u001b[1C897\u001b[1C\u001b[22m#\u001b[1CСписок\u001b[1C/\u001b[1Cдиапаз\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mон\r\n\u001b[1C\u001b[2m \u001b[1C898\u001b[1C\u001b[22mfilter(id__in=[1,\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m 2,\u001b[1C3])\r\n\u001b[1C\u001b[2m \u001b[1C899\u001b[1C\u001b[22mfilter(age__range\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m=(18,\u001b[1C30))\r\n\u001b[1C\u001b[2m \u001b[1C900\r\n\u001b[1C \u001b[1C901\u001b[1C\u001b[22m#\u001b[1CNULL\r\n\u001b[1C\u001b[2m \u001b[1C902\u001b[1C\u001b[22mfilter(bio__isnul\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ml=True)\r\n\u001b[1C\u001b[2m \u001b[1C903\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m \u001b[1C904\r\n\u001b[1C \u001b[1C905\u001b[1C\u001b[22m###\u001b[1CАгрегация\u001b[1Cи\u001b[1Cа\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mннотация\r\n\u001b[1C\u001b[2m \u001b[1C906\r\n\u001b[1C \u001b[1C907\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m \u001b[1C908\u001b[1C\u001b[22mfrom\u001b[1Cdjango.db.mo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mdels\u001b[1Cimport\u001b[1CAvg,\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mCount,\u001b[1CSum,\u001b[1CMin,\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mMax\r\n\u001b[1C\u001b[2m \u001b[1C909\r\n\u001b[1C \u001b[1C910\u001b[1C\u001b[22m#\u001b[1Caggregate\u001b[1C—\u001b[1Cодн\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mо\u001b[1Cитоговое\u001b[1Cзначен\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mие;\u001b[1Cвозвращает\u001b[1Cdi\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mct\r\n\u001b[1C\u001b[2m \u001b[1C911\u001b[1C\u001b[22mresult\u001b[1C=\u001b[1CBook.obj\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mects.aggregate(av\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mg_rating=Avg(\"rat\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ming\"))\r\n\u001b[1C\u001b[2m \u001b[1C912\u001b[1C\u001b[22mprint(result[\"avg\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m_rating\"])\r\n\u001b[1C\u001b[2m \u001b[1C913\r\n\u001b[1C \u001b[1C914\u001b[1C\u001b[22m#\u001b[1Cannotate\u001b[1C—\u001b[1Cвычи\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mсляемое\u001b[1Cполе\u001b[1Cдля\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mкаждого\u001b[1Cобъекта\r\n\u001b[1C\u001b[2m \u001b[1C915\u001b[1C\u001b[22mauthors\u001b[1C=\u001b[1CAuthor.\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mobjects.annotate(\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mtotal_books=Count\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m(\"books\"))\r\n\u001b[1C\u001b[2m \u001b[1C916\u001b[1C\u001b[22mfor\u001b[1Ca\u001b[1Cin\u001b[1Cauthors:\r\n\u001b[1C\u001b[2m \u001b[1C917\u001b[1C\u001b[22m \u001b[3Cprint(a.name,\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m a.total_books)\r\n\u001b[1C\u001b[2m \u001b[1C918\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m \u001b[1C919\r\n\u001b[1C \u001b[1C920\u001b[1C\u001b[22m###\u001b[1CQ-объекты\u001b[1C(сл\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mожные\u001b[1Cусловия)\r\n\u001b[1C\u001b[2m \u001b[1C921\r\n\u001b[1C \u001b[1C922\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m \u001b[1C923\u001b[1C\u001b[22mfrom\u001b[1Cdjango.db.mo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mdels\u001b[1Cimport\u001b[1CQ\r\n\u001b[1C\u001b[2m \u001b[1C924\r\n\u001b[1C \u001b[1C925\u001b[1C\u001b[22m#\u001b[1COR\r\n\u001b[1C\u001b[2m \u001b[1C926\u001b[1C\u001b[22mbooks\u001b[1C=\u001b[1CBook.obje\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mcts.filter(Q(rati\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mng__gt=4)\u001b[1C|\u001b[1CQ(tit\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mle__icontains=\"Dj\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mango\"))\r\n\u001b[1C\u001b[2m \u001b[1C927\r\n\u001b[1C \u001b[1C928\u001b[1C\u001b[22m#\u001b[1CAND\r\n\u001b[1C\u001b[2m \u001b[1C929\u001b[1C\u001b[22mbooks\u001b[1C=\u001b[1CBook.obje\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mcts.filter(Q(rati\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mng__gt=4)\u001b[1C&\u001b[1CQ(is_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mpublished=True))\r\n\u001b[1C\u001b[2m \u001b[1C930\r\n\u001b[1C \u001b[1C931\u001b[1C\u001b[22m#\u001b[1CNOT\r\n\u001b[1C\u001b[2m \u001b[1C932\u001b[1C\u001b[22mbooks\u001b[1C=\u001b[1CBook.obje\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mcts.filter(~Q(rat\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ming__lt=3))\r\n\u001b[1C\u001b[2m \u001b[1C933\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m \u001b[1C934\r\n\u001b[1C \u001b[1C935\u001b[1C\u001b[22m###\u001b[1CF-выражения\u001b[1C(\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mоперации\u001b[1Cв\u001b[1CБД)\r\n\u001b[1C\u001b[2m \u001b[1C936\r\n\u001b[1C \u001b[1C937\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m \u001b[1C938\u001b[1C\u001b[22mfrom\u001b[1Cdjango.db.mo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mdels\u001b[1Cimport\u001b[1CF\r\n\u001b[1C\u001b[2m \u001b[1C939\r\n\u001b[1C \u001b[1C940\u001b[1C\u001b[22m#\u001b[1CУвеличить\u001b[1Cсчётч\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mик\u001b[1Cпросмотров\u001b[1Cпря\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mмо\u001b[1Cв\u001b[1CБД,\u001b[1Cбез\u001b[1Cзагр\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mузки\u001b[1Cв\u001b[1CPython\r\n\u001b[1C\u001b[2m \u001b[1C941\u001b[1C\u001b[22mBook.objects.filt\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mer(id=1).update(v\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22miews=F(\"views\")\u001b[1C+\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m 1)\r\n\u001b[1C\u001b[2m \u001b[1C942\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m \u001b[1C943\r\n\u001b[1C \u001b[1C944\u001b[1C\u001b[22m###\u001b[1CЦепочки\u001b[1Cметод\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mов\r\n\u001b[1C\u001b[2m \u001b[1C945\r\n\u001b[1C \u001b[1C946\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m \u001b[1C947\u001b[1C\u001b[22mqueryset\u001b[1C=\u001b[1C(\r\n\u001b[1C\u001b[2m \u001b[1C948\u001b[1C\u001b[22m \u001b[3CPerson.object\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ms\r\n\u001b[1C\u001b[2m \u001b[1C949\u001b[1C\u001b[22m \u001b[3C.filter(age__\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mgte=18)\r\n\u001b[1C\u001b[2m \u001b[1C950\u001b[1C\u001b[22m \u001b[3C.exclude(is_a\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mctive=False)\r\n\u001b[1C\u001b[2m \u001b[1C951\u001b[1C\u001b[22m \u001b[3C.order_by(\"fi\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrst_name\")\r\n\u001b[1C\u001b[2m \u001b[1C952\u001b[1C\u001b[22m \u001b[3C.distinct()\r\n\u001b[1C\u001b[2m \u001b[1C953\u001b[1C\u001b[22m)\r\n\u001b[1C\u001b[2m \u001b[1C954\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m \u001b[1C955\r\n\u001b[1C \u001b[1C956\u001b[1C\u001b[22m###\u001b[1CПроблема\u001b[1CN+1\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mи\u001b[1Cоптимизация\r\n\u001b[1C\u001b[2m \u001b[1C957\r\n\u001b[1C \u001b[1C958\u001b[1C\u001b[22m**N+1**\u001b[1C—\u001b[1Cодин\u001b[1Cза\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mпрос\u001b[1Cза\u001b[1Cсписком\u001b[1C+\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m N\u001b[1Cзапросов\u001b[1Cв\u001b[1Cцик\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mле\u001b[1Cна\u001b[1Cкаждый\u001b[1Cсвяз\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mанный\u001b[1Cобъект.\r\n\u001b[1C\u001b[2m \u001b[1C959\r\n\u001b[1C \u001b[1C960\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m \u001b[1C961\u001b[1C\u001b[22m#\u001b[1CПлохо:\u001b[1CN+1\r\n\u001b[1C\u001b[2m \u001b[1C962\u001b[1C\u001b[22mbooks\u001b[1C=\u001b[1CBook.obje\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mcts.all()\r\n\u001b[1C\u001b[2m \u001b[1C963\u001b[1C\u001b[22mfor\u001b[1Cbook\u001b[1Cin\u001b[1Cbooks\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m:\r\n\u001b[1C\u001b[2m \u001b[1C964\u001b[1C\u001b[22m \u001b[3Cprint(book.au\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mthor.name)\u001b[2C#\u001b[1Cзап\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mрос\u001b[1Cна\u001b[1Cкаждую\u001b[1Cите\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mрацию\r\n\u001b[1C\u001b[2m \u001b[1C965\r\n\u001b[1C \u001b[1C966\u001b[1C\u001b[22m#\u001b[1CХорошо:\u001b[1Cselect_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrelated\u001b[1C(JOIN)\u001b[1Cдл\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mя\u001b[1CForeignKey/OneT\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22moOne\r\n\u001b[1C\u001b[2m \u001b[1C967\u001b[1C\u001b[22mbooks\u001b[1C=\u001b[1CBook.obje\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mcts.select_relate\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22md(\"author\")\r\n\u001b[1C\u001b[2m \u001b[1C968\r\n\u001b[1C \u001b[1C969\u001b[1C\u001b[22m#\u001b[1CХорошо:\u001b[1Cprefetc\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mh_related\u001b[1C(отдель\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mный\u001b[1Cзапрос)\u001b[1Cдля\u001b[1CM\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22manyToMany\u001b[1C/\u001b[1Cобрат\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mные\u001b[1Cсвязи\r\n\u001b[1C\u001b[2m \u001b[1C970\u001b[1C\u001b[22mbooks\u001b[1C=\u001b[1CBook.obje\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mcts.prefetch_rela\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mted(\"authors\")\r\n\u001b[1C\u001b[2m \u001b[1C971\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m \u001b[1C972\r\n\u001b[1C \u001b[1C973\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m \u001b[1C974\r\n\u001b[1C \u001b[1C975\u001b[1C\u001b[22m##\u001b[1CБлок\u001b[1C7–10.\u001b[1CDja\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mngo:\u001b[1CViews,\u001b[1CURLs,\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m Templates\r\n\u001b[1C\u001b[2m \u001b[1C976\r\n\u001b[1C \u001b[1C977\u001b[1C\u001b[22m###\u001b[1CМаршрутизация\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m (URLs)\r\n\u001b[1C\u001b[2m \u001b[1C978\r\n\u001b[1C \u001b[1C979\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m \u001b[1C980\u001b[1C\u001b[22m#\u001b[1Cproject/urls.py\r\n\u001b[1C\u001b[2m \u001b[1C981\u001b[1C\u001b[22mfrom\u001b[1Cdjango.urls\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mimport\u001b[1Cinclude,\u001b[1Cp\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22math\r\n\u001b[1C\u001b[2m \u001b[1C982\r\n\u001b[1C \u001b[1C983\u001b[1C\u001b[22murlpatterns\u001b[1C=\u001b[1C[\r\n\u001b[1C\u001b[2m \u001b[1C984\u001b[1C\u001b[22m \u001b[3Cpath(\"blog/\",\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m include(\"blog.ur\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mls\")),\r\n\u001b[1C\u001b[2m \u001b[1C985\u001b[1C\u001b[22m]\r\n\u001b[1C\u001b[2m \u001b[1C986\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m \u001b[1C987\r\n\u001b[1C \u001b[1C988\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m \u001b[1C989\u001b[1C\u001b[22m#\u001b[1Cblog/urls.py\r\n\u001b[1C\u001b[2m \u001b[1C990\u001b[1C\u001b[22mfrom\u001b[1Cdjango.urls\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mimport\u001b[1Cpath\r\n\u001b[1C\u001b[2m \u001b[1C991\u001b[1C\u001b[22mfrom\u001b[1C.\u001b[1Cimport\u001b[1Cvie\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mws\r\n\u001b[1C\u001b[2m \u001b[1C992\u001b[1C\u001b[22mfrom\u001b[1C.views\u001b[1Cimpor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt\u001b[1CPostListView,\u001b[1CP\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mostDetailView,\u001b[1CAb\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22moutView\r\n\u001b[1C\u001b[2m \u001b[1C993\r\n\u001b[1C \u001b[1C994\u001b[1C\u001b[22mapp_name\u001b[1C=\u001b[1C\"blog\"\r\n\u001b[1C\u001b[2m \u001b[1C995\r\n\u001b[1C \u001b[1C996\u001b[1C\u001b[22murlpatterns\u001b[1C=\u001b[1C[\r\n\u001b[1C\u001b[2m \u001b[1C997\u001b[1C\u001b[22m \u001b[3Cpath(\"\",\u001b[1Cview\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ms.post_list,\u001b[1Cname\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m=\"post_list\"),\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m \u001b[6C#\u001b[1CFBV\r\n\u001b[1C\u001b[2m \u001b[1C998\u001b[1C\u001b[22m \u001b[3Cpath(\"/\",\u001b[1CPostDetailVi\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mew.as_view(),\u001b[1Cnam\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22me=\"post_detail\"),\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m \u001b[1C#\u001b[1CCBV\r\n\u001b[1C\u001b[2m \u001b[1C999\u001b[1C\u001b[22m \u001b[3Cpath(\"about/\"\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m,\u001b[1CAboutView.as_vi\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mew(),\u001b[1Cname=\"about\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m\"),\r\n\u001b[1C\u001b[2m 1000\u001b[1C\u001b[22m \u001b[3Cpath(\"tag//\",\u001b[1Cviews\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.posts_by_tag,\u001b[1Cna\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mme=\"posts_by_tag\"\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m),\r\n\u001b[1C\u001b[2m 1001\u001b[1C\u001b[22m]\r\n\u001b[1C\u001b[2m 1002\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1003\r\n\u001b[1C 1004\u001b[1C\u001b[22m**Конвертеры\u001b[1Cпути\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m:**\r\n\u001b[1C\u001b[2m 1005\u001b[1C\u001b[22m|\u001b[1CКонвертер\u001b[1C|\u001b[1CТип\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m |\u001b[1CПример\u001b[1CURL\u001b[1C|\r\n\u001b[1C\u001b[2m 1006\u001b[1C\u001b[22m|---|---|---|\r\n\u001b[1C\u001b[2m 1007\u001b[1C\u001b[22m|\u001b[1C``\u001b[1C|\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mСтрока\u001b[1Cбез\u001b[1C`/`\u001b[1C|\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m`/user/ivan/`\u001b[1C|\r\n\u001b[1C\u001b[2m 1008\u001b[1C\u001b[22m|\u001b[1C``\u001b[1C|\u001b[1CЦе\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mлое\u001b[1Cположительное\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m |\u001b[1C`/post/42/`\u001b[1C|\r\n\u001b[1C\u001b[2m 1009\u001b[1C\u001b[22m|\u001b[1C``\u001b[1C|\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m Буквы,\u001b[1Cцифры,\u001b[1C`_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m`,\u001b[1C`-`\u001b[1C|\u001b[1C`/tag/dj\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mango-orm/`\u001b[1C|\r\n\u001b[1C\u001b[2m 1010\u001b[1C\u001b[22m|\u001b[1C``\u001b[1C|\u001b[1CU\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mUID\u001b[1C|\u001b[1C`/item/0751\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m94d3-...`\u001b[1C|\r\n\u001b[1C\u001b[2m 1011\u001b[1C\u001b[22m|\u001b[1C`\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m`\u001b[1C|\u001b[1CСтрока\u001b[1Cс\u001b[1C`/`\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m|\u001b[1C`/files/a/b/c.t\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mxt`\u001b[1C|\r\n\u001b[1C\u001b[2m 1012\r\n\u001b[1C 1013\u001b[1C\u001b[22m**`re_path`**\u001b[1C—\u001b[1Cм\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mаршрут\u001b[1Cс\u001b[1Cрегулярн\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mым\u001b[1Cвыражением:\r\n\u001b[1C\u001b[2m 1014\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1015\u001b[1C\u001b[22mfrom\u001b[1Cdjango.urls\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mimport\u001b[1Cre_path\r\n\u001b[1C\u001b[2m 1016\u001b[1C\u001b[22mre_path(r\"^post/(\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m?P[0-9]+)/$\",\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m views.post_detai\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ml)\r\n\u001b[1C\u001b[2m 1017\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1018\r\n\u001b[1C 1019\u001b[1C\u001b[22m**Реверс\u001b[1CURL:**\r\n\u001b[1C\u001b[2m 1020\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1021\u001b[1C\u001b[22mfrom\u001b[1Cdjango.urls\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mimport\u001b[1Creverse\r\n\u001b[1C\u001b[2m 1022\u001b[1C\u001b[22murl\u001b[1C=\u001b[1Creverse(\"bl\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mog:post_detail\",\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mkwargs={\"pk\":\u001b[1C1})\r\n\u001b[1C\u001b[2m 1023\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1024\r\n\u001b[1C 1025\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1026\u001b[1C\u001b[22m{%\u001b[1Curl\u001b[1C'blog:post\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m_detail'\u001b[1Cpost.pk\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m%}\r\n\u001b[1C\u001b[2m 1027\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1028\r\n\u001b[1C 1029\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1030\r\n\u001b[1C 1031\u001b[1C\u001b[22m###\u001b[1CФункциональны\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mе\u001b[1Cпредставления\u001b[1C(\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mFBV)\r\n\u001b[1C\u001b[2m 1032\r\n\u001b[1C 1033\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1034\u001b[1C\u001b[22mfrom\u001b[1Cdjango.short\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mcuts\u001b[1Cimport\u001b[1Crende\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mr,\u001b[1Cget_object_or_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m404\r\n\u001b[1C\u001b[2m 1035\r\n\u001b[1C 1036\u001b[1C\u001b[22mdef\u001b[1Cpost_list(req\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22muest):\r\n\u001b[1C\u001b[2m 1037\u001b[1C\u001b[22m \u001b[3Cposts\u001b[1C=\u001b[1CPost.\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mobjects.all()[:5]\r\n\u001b[1C\u001b[2m 1038\u001b[1C\u001b[22m \u001b[3Creturn\u001b[1Crender\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m(request,\u001b[1C\"blog/l\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mist.html\",\u001b[1C{\"post\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ms\":\u001b[1Cposts})\r\n\u001b[1C\u001b[2m 1039\r\n\u001b[1C 1040\u001b[1C\u001b[22mdef\u001b[1Cpost_detail(r\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mequest,\u001b[1Cpk):\r\n\u001b[1C\u001b[2m 1041\u001b[1C\u001b[22m \u001b[3Cpost\u001b[1C=\u001b[1Cget_ob\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mject_or_404(Post,\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m pk=pk)\r\n\u001b[1C\u001b[2m 1042\u001b[1C\u001b[22m \u001b[3Creturn\u001b[1Crender\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m(request,\u001b[1C\"blog/d\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22metail.html\",\u001b[1C{\"po\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mst\":\u001b[1Cpost})\r\n\u001b[1C\u001b[2m 1043\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1044\r\n\u001b[1C 1045\u001b[1C\u001b[22m-\u001b[1CПринимают\u001b[1C`Http\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mRequest`,\u001b[1Cвозвращ\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mают\u001b[1C`HttpResponse\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m`.\r\n\u001b[1C\u001b[2m 1046\u001b[1C\u001b[22m-\u001b[1C`render(request\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m,\u001b[1Ctemplate,\u001b[1Cconte\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mxt)`\u001b[1C—\u001b[1Cсобирает\u001b[1Cо\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mтвет.\r\n\u001b[1C\u001b[2m 1047\u001b[1C\u001b[22m-\u001b[1C`get_object_or_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m404`\u001b[1C—\u001b[1Cвозвращает\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m объект\u001b[1Cили\u001b[1C404.\r\n\u001b[1C\u001b[2m 1048\r\n\u001b[1C 1049\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1050\r\n\u001b[1C 1051\u001b[1C\u001b[22m###\u001b[1CКлассовые\u001b[1Cпре\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mдставления\u001b[1C(CBV)\r\n\u001b[1C\u001b[2m 1052\r\n\u001b[1C 1053\u001b[1C\u001b[22mВызываются\u001b[1Cчерез\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m`.as_view()`.\r\n\u001b[1C\u001b[2m 1054\r\n\u001b[1C 1055\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1056\u001b[1C\u001b[22mfrom\u001b[1Cdjango.views\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.generic\u001b[1Cimport\u001b[1CT\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22memplateView,\u001b[1CList\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mView,\u001b[1CDetailView\r\n\u001b[1C\u001b[2m 1057\r\n\u001b[1C 1058\u001b[1C\u001b[22mclass\u001b[1CAboutView(T\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22memplateView):\r\n\u001b[1C\u001b[2m 1059\u001b[1C\u001b[22m \u001b[3Ctemplate_name\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m =\u001b[1C\"blog/about.ht\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mml\"\r\n\u001b[1C\u001b[2m 1060\r\n\u001b[1C 1061\r\n\u001b[1C 1062\u001b[1C\u001b[22mclass\u001b[1CPostListVie\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mw(ListView):\r\n\u001b[1C\u001b[2m 1063\u001b[1C\u001b[22m \u001b[3Cmodel\u001b[1C=\u001b[1CPost\r\n\u001b[1C\u001b[2m 1064\u001b[1C\u001b[22m \u001b[3Ctemplate_name\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m =\u001b[1C\"blog/list.htm\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ml\"\r\n\u001b[1C\u001b[2m 1065\u001b[1C\u001b[22m \u001b[3Ccontext_objec\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt_name\u001b[1C=\u001b[1C\"posts\"\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m \u001b[1C#\u001b[1Cпо\u001b[1Cумолчанию:\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m object_list\r\n\u001b[1C\u001b[2m 1066\u001b[1C\u001b[22m \u001b[3Cpaginate_by\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m 10\r\n\u001b[1C\u001b[2m 1067\r\n\u001b[1C 1068\u001b[1C\u001b[22m \u001b[3Cdef\u001b[1Cget_query\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mset(self):\r\n\u001b[1C\u001b[2m 1069\u001b[1C\u001b[22m \u001b[7Creturn\u001b[1CPo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mst.objects.filter\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m(is_published=Tru\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22me).order_by(\"-cre\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mated_at\")\r\n\u001b[1C\u001b[2m 1070\r\n\u001b[1C 1071\u001b[1C\u001b[22m \u001b[3Cdef\u001b[1Cget_conte\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mxt_data(self,\u001b[1C**k\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mwargs):\r\n\u001b[1C\u001b[2m 1072\u001b[1C\u001b[22m \u001b[7Ccontext\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m super().get_cont\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mext_data(**kwargs\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m)\r\n\u001b[1C\u001b[2m 1073\u001b[1C\u001b[22m \u001b[7Ccontext[\"\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mextra\"]\u001b[1C=\u001b[1C\"доп.\u001b[1Cд\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mанные\"\r\n\u001b[1C\u001b[2m 1074\u001b[1C\u001b[22m \u001b[7Creturn\u001b[1Cco\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mntext\r\n\u001b[1C\u001b[2m 1075\r\n\u001b[1C 1076\r\n\u001b[1C 1077\u001b[1C\u001b[22mclass\u001b[1CPostDetailV\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22miew(DetailView):\r\n\u001b[1C\u001b[2m 1078\u001b[1C\u001b[22m \u001b[3Cmodel\u001b[1C=\u001b[1CPost\r\n\u001b[1C\u001b[2m 1079\u001b[1C\u001b[22m \u001b[3Ctemplate_name\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m =\u001b[1C\"blog/detail.h\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mtml\"\r\n\u001b[1C\u001b[2m 1080\u001b[1C\u001b[22m \u001b[3Ccontext_objec\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt_name\u001b[1C=\u001b[1C\"post\"\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m \u001b[1C#\u001b[1Cпо\u001b[1Cумолчанию:\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m object\r\n\u001b[1C\u001b[2m 1081\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1082\r\n\u001b[1C 1083\u001b[1C\u001b[22m**Имена\u001b[1Cпеременны\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mх\u001b[1Cпо\u001b[1Cумолчанию:**\r\n\u001b[1C\u001b[2m 1084\u001b[1C\u001b[22m-\u001b[1C`ListView`\u001b[1C→\u001b[1C`o\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mbject_list`.\r\n\u001b[1C\u001b[2m 1085\u001b[1C\u001b[22m-\u001b[1C`DetailView`\u001b[1C→\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m`object`.\r\n\u001b[1C\u001b[2m 1086\r\n\u001b[1C 1087\u001b[1C\u001b[22m**Пагинация\u001b[1Cв\u001b[1CLis\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mtView:**\r\n\u001b[1C\u001b[2m 1088\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1089\u001b[1C\u001b[22m{%\u001b[1Cif\u001b[1Cis_paginate\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22md\u001b[1C%}\r\n\u001b[1C\u001b[2m 1090\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cif\u001b[1Cpage_obj.\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mhas_previous\u001b[1C%}\r\n\u001b[1C\u001b[2m 1091\u001b[1C\u001b[22m \u001b[3CНазад\r\n\u001b[1C\u001b[2m 1092\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cendif\u001b[1C%}\r\n\u001b[1C\u001b[2m 1093\u001b[1C\u001b[22m \u001b[1CСтраница\u001b[1C{{\u001b[1Cpag\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22me_obj.number\u001b[1C}}\u001b[1Cи\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mз\u001b[1C{{\u001b[1Cpage_obj.pag\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22minator.num_pages\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m}}\r\n\u001b[1C\u001b[2m 1094\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cif\u001b[1Cpage_obj.\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mhas_next\u001b[1C%}\r\n\u001b[1C\u001b[2m 1095\u001b[1C\u001b[22m \u001b[3CВперёд\r\n\u001b[1C\u001b[2m 1096\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cendif\u001b[1C%}\r\n\u001b[1C\u001b[2m 1097\u001b[1C\u001b[22m{%\u001b[1Cendif\u001b[1C%}\r\n\u001b[1C\u001b[2m 1098\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1099\r\n\u001b[1C 1100\u001b[1C\u001b[22m**Шаблоны\u001b[1Cпо\u001b[1Cумол\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mчанию\u001b[1C(если\u001b[1Cне\u001b[1Cза\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mдан\u001b[1C`template_nam\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22me`):**\r\n\u001b[1C\u001b[2m 1101\u001b[1C\u001b[22m-\u001b[1C`ListView`\u001b[1C→\u001b[1C`<\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mapp>/_list\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.html`\r\n\u001b[1C\u001b[2m 1102\u001b[1C\u001b[22m-\u001b[1C`DetailView`\u001b[1C→\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m`/_de\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mtail.html`\r\n\u001b[1C\u001b[2m 1103\r\n\u001b[1C 1104\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1105\r\n\u001b[1C 1106\u001b[1C\u001b[22m###\u001b[1CШаблоны\u001b[1C(Djan\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mgo\u001b[1CTemplate\u001b[1CLangu\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mage)\r\n\u001b[1C\u001b[2m 1107\r\n\u001b[1C 1108\u001b[1C\u001b[22m**Переменные:**\r\n\u001b[1C\u001b[2m 1109\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1110\u001b[1C\u001b[22m{{\u001b[1Cpost.title\u001b[1C}}\r\n\u001b[1C\u001b[2m 1111\u001b[1C\u001b[22m{{\u001b[1Cuser.get_full_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mname\u001b[1C}}\r\n\u001b[1C\u001b[2m 1112\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1113\r\n\u001b[1C 1114\u001b[1C\u001b[22m**Теги:**\r\n\u001b[1C\u001b[2m 1115\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1116\u001b[1C\u001b[22m{%\u001b[1Cif\u001b[1Cpost.is_pub\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mlished\u001b[1C%}\r\n\u001b[1C\u001b[2m 1117\u001b[1C\u001b[22m \u001b[1C

Опубликовано\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m

\r\n\u001b[1C\u001b[2m 1118\u001b[1C\u001b[22m{%\u001b[1Celif\u001b[1Cpost.is_d\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mraft\u001b[1C%}\r\n\u001b[1C\u001b[2m 1119\u001b[1C\u001b[22m \u001b[1C

Черновик

\r\n\u001b[1C\u001b[2m 1120\u001b[1C\u001b[22m{%\u001b[1Celse\u001b[1C%}\r\n\u001b[1C\u001b[2m 1121\u001b[1C\u001b[22m \u001b[1C

Архив

\r\n\u001b[1C\u001b[2m 1122\u001b[1C\u001b[22m{%\u001b[1Cendif\u001b[1C%}\r\n\u001b[1C\u001b[2m 1123\r\n\u001b[1C 1124\u001b[1C\u001b[22m{%\u001b[1Cfor\u001b[1Cpost\u001b[1Cin\u001b[1Cpo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22msts\u001b[1C%}\r\n\u001b[1C\u001b[2m 1125\u001b[1C\u001b[22m \u001b[1C

{{\u001b[1Cforloop.c\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mounter\u001b[1C}}.\u001b[1C{{\u001b[1Cpos\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt.title\u001b[1C}}

\r\n\u001b[1C\u001b[2m 1126\u001b[1C\u001b[22m{%\u001b[1Cempty\u001b[1C%}\r\n\u001b[1C\u001b[2m 1127\u001b[1C\u001b[22m \u001b[1C

Постов\u001b[1Cнет.<\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m/p>\r\n\u001b[1C\u001b[2m 1128\u001b[1C\u001b[22m{%\u001b[1Cendfor\u001b[1C%}\r\n\u001b[1C\u001b[2m 1129\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1130\r\n\u001b[1C 1131\u001b[1C\u001b[22m**`forloop`:**\r\n\u001b[1C\u001b[2m 1132\u001b[1C\u001b[22m-\u001b[1C`forloop.counte\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mr`\u001b[1C—\u001b[1Cсчётчик\u001b[1Cс\u001b[1C1.\r\n\u001b[1C\u001b[2m 1133\u001b[1C\u001b[22m-\u001b[1C`forloop.counte\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mr0`\u001b[1C—\u001b[1Cсчётчик\u001b[1Cс\u001b[1C0\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.\r\n\u001b[1C\u001b[2m 1134\u001b[1C\u001b[22m-\u001b[1C`forloop.first`\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m /\u001b[1C`forloop.last`\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m —\u001b[1Cпервый/последн\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mий\u001b[1Cэлемент.\r\n\u001b[1C\u001b[2m 1135\r\n\u001b[1C 1136\u001b[1C\u001b[22m**Фильтры:**\r\n\u001b[1C\u001b[2m 1137\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1138\u001b[1C\u001b[22m{{\u001b[1Cpost.created_a\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt|date:\"Y-m-d\"\u001b[1C}}\r\n\u001b[1C\u001b[2m 1139\u001b[1C\u001b[22m{{\u001b[1Ctext|lower\u001b[1C}}\r\n\u001b[1C\u001b[2m 1140\u001b[1C\u001b[22m{{\u001b[1Ctext|upper\u001b[1C}}\r\n\u001b[1C\u001b[2m 1141\u001b[1C\u001b[22m{{\u001b[1Clist|length\u001b[1C}}\r\n\u001b[1C\u001b[2m 1142\u001b[1C\u001b[22m{{\u001b[1Cvalue|default:\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m\"нет\"\u001b[1C}}\r\n\u001b[1C\u001b[2m 1143\u001b[1C\u001b[22m{{\u001b[1Cprice|floatfor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mmat:2\u001b[1C}}\r\n\u001b[1C\u001b[2m 1144\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1145\r\n\u001b[1C 1146\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1147\r\n\u001b[1C 1148\u001b[1C\u001b[22m###\u001b[1CНаследование\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mшаблонов\r\n\u001b[1C\u001b[2m 1149\r\n\u001b[1C 1150\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1151\u001b[1C\u001b[22m\r\n\u001b[1C\u001b[2m 1152\u001b[1C\u001b[22m\r\n\u001b[1C\u001b[2m 1153\u001b[1C\u001b[22m\r\n\u001b[1C\u001b[2m 1154\u001b[1C\u001b[22m\r\n\u001b[1C\u001b[2m 1155\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cblock\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m title\u001b[1C%}Сайт{%\u001b[1Ce\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mndblock\u001b[1C%}</title\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m>\r\n\u001b[1C\u001b[2m 1156\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cload\u001b[1Cstatic\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m%}\r\n\u001b[1C\u001b[2m 1157\u001b[1C\u001b[22m \u001b[1C<link\u001b[1C\u001b[38;5;148mrel\u001b[38;5;231m=\u001b[38;5;186m\"styl\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mesheet\"\u001b[38;5;231m \u001b[38;5;148mhref\u001b[38;5;231m=\u001b[38;5;186m\"{%\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mstatic\u001b[1C'css/app.c\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mss'\u001b[1C%}\"\u001b[38;5;231m>\r\n\u001b[1C\u001b[2m 1158\u001b[1C\u001b[22m</head>\r\n\u001b[1C\u001b[2m 1159\u001b[1C\u001b[22m<body>\r\n\u001b[1C\u001b[2m 1160\u001b[1C\u001b[22m \u001b[1C<nav>...</nav>\r\n\u001b[1C\u001b[2m 1161\u001b[1C\u001b[22m \u001b[1C<main>\r\n\u001b[1C\u001b[2m 1162\u001b[1C\u001b[22m \u001b[3C{%\u001b[1Cblock\u001b[1Ccont\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ment\u001b[1C%}{%\u001b[1Cendblock\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m %}\r\n\u001b[1C\u001b[2m 1163\u001b[1C\u001b[22m \u001b[1C</main>\r\n\u001b[1C\u001b[2m 1164\u001b[1C\u001b[22m</body>\r\n\u001b[1C\u001b[2m 1165\u001b[1C\u001b[22m</html>\r\n\u001b[1C\u001b[2m 1166\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1167\r\n\u001b[1C 1168\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1169\u001b[1C\u001b[22m<!--\u001b[1Ctemplates/bl\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mog/list.html\u001b[1C-->\r\n\u001b[1C\u001b[2m 1170\u001b[1C\u001b[22m{%\u001b[1Cextends\u001b[1C\"base.\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mhtml\"\u001b[1C%}\r\n\u001b[1C\u001b[2m 1171\r\n\u001b[1C 1172\u001b[1C\u001b[22m{%\u001b[1Cblock\u001b[1Ctitle\u001b[1C%}\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mПосты{%\u001b[1Cendblock\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m%}\r\n\u001b[1C\u001b[2m 1173\r\n\u001b[1C 1174\u001b[1C\u001b[22m{%\u001b[1Cblock\u001b[1Ccontent\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m%}\r\n\u001b[1C\u001b[2m 1175\u001b[1C\u001b[22m \u001b[1C<h1>Посты</h1>\r\n\u001b[1C\u001b[2m 1176\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cfor\u001b[1Cpost\u001b[1Cin\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mposts\u001b[1C%}\r\n\u001b[1C\u001b[2m 1177\u001b[1C\u001b[22m \u001b[3C<a\u001b[1Chref=\"{%\u001b[1Cu\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrl\u001b[1C'blog:post_det\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mail'\u001b[1Cpost.pk\u001b[1C%}\">\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m{{\u001b[1Cpost.title\u001b[1C}}<\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m/a>\r\n\u001b[1C\u001b[2m 1178\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cendfor\u001b[1C%}\r\n\u001b[1C\u001b[2m 1179\u001b[1C\u001b[22m{%\u001b[1Cendblock\u001b[1C%}\r\n\u001b[1C\u001b[2m 1180\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1181\r\n\u001b[1C 1182\u001b[1C\u001b[22m**Include\u001b[1Cшаблоно\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mв:**\r\n\u001b[1C\u001b[2m 1183\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1184\u001b[1C\u001b[22m{%\u001b[1Cinclude\u001b[1C\"blog/\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mpartials/card.htm\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ml\"\u001b[1C%}\r\n\u001b[1C\u001b[2m 1185\u001b[1C\u001b[22m{%\u001b[1Cinclude\u001b[1C\"blog/\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mpartials/card.htm\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ml\"\u001b[1Cwith\u001b[1Cpost=item\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m only\u001b[1C%}\r\n\u001b[1C\u001b[2m 1186\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1187\r\n\u001b[1C 1188\u001b[1C\u001b[22m**Статические\u001b[1Cфай\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mлы:**\r\n\u001b[1C\u001b[2m 1189\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1190\u001b[1C\u001b[22m{%\u001b[1Cload\u001b[1Cstatic\u001b[1C%}\r\n\u001b[1C\u001b[2m 1191\u001b[1C\u001b[22m<img\u001b[1C\u001b[38;5;148msrc\u001b[38;5;231m=\u001b[38;5;186m\"{%\u001b[1Cstat\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mic\u001b[1C'images/logo.p\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mng'\u001b[1C%}\"\u001b[38;5;231m \u001b[38;5;148malt\u001b[38;5;231m=\u001b[38;5;186m\"Лого\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mтип\"\u001b[38;5;231m>\r\n\u001b[1C\u001b[2m 1192\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1193\r\n\u001b[1C 1194\u001b[1C\u001b[22m**Вызов\u001b[1Cметодов\u001b[1Cв\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m шаблонах:**\u001b[1CDjan\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mgo\u001b[1Cвызывает\u001b[1Cметод\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mы\u001b[1Cбез\u001b[1Cаргументов\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mавтоматически:\r\n\u001b[1C\u001b[2m 1195\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1196\u001b[1C\u001b[22m{{\u001b[1Cuser.get_full_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mname\u001b[1C}}\u001b[5C{#\u001b[1Cвы\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mзов\u001b[1Cget_full_name\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m()\u001b[1C#}\r\n\u001b[1C\u001b[2m 1197\u001b[1C\u001b[22m{{\u001b[1Cpost.get_absol\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mute_url\u001b[1C}}\u001b[2C{#\u001b[1Cвы\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mзов\u001b[1Cget_absolute_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22murl()\u001b[1C#}\r\n\u001b[1C\u001b[2m 1198\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1199\r\n\u001b[1C 1200\u001b[1C\u001b[22mМетоды\u001b[1Cс\u001b[1Cаргумент\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mами\u001b[1Cнапрямую\u001b[1Cвызв\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mать\u001b[1Cнельзя\u001b[1C—\u001b[1Cлоги\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mку\u001b[1Cнужно\u001b[1Cвынести\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mво\u001b[1Cview\u001b[1Cили\u001b[1Ctempl\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22matetag.\r\n\u001b[1C\u001b[2m 1201\r\n\u001b[1C 1202\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1203\r\n\u001b[1C 1204\u001b[1C\u001b[22m##\u001b[1CБлок\u001b[1C12.\u001b[1CDjang\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mo:\u001b[1CФормы\r\n\u001b[1C\u001b[2m 1205\r\n\u001b[1C 1206\u001b[1C\u001b[22m###\u001b[1Cforms.Form\r\n\u001b[1C\u001b[2m 1207\r\n\u001b[1C 1208\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1209\u001b[1C\u001b[22mfrom\u001b[1Cdjango\u001b[1Cimpor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt\u001b[1Cforms\r\n\u001b[1C\u001b[2m 1210\r\n\u001b[1C 1211\u001b[1C\u001b[22mclass\u001b[1CContactForm\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m(forms.Form):\r\n\u001b[1C\u001b[2m 1212\u001b[1C\u001b[22m \u001b[3Cname\u001b[1C=\u001b[1Cforms.\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mCharField(max_len\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mgth=100)\r\n\u001b[1C\u001b[2m 1213\u001b[1C\u001b[22m \u001b[3Cemail\u001b[1C=\u001b[1Cforms\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.EmailField()\r\n\u001b[1C\u001b[2m 1214\u001b[1C\u001b[22m \u001b[3Cmessage\u001b[1C=\u001b[1Cfor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mms.CharField(widg\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22met=forms.Textarea\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m)\r\n\u001b[1C\u001b[2m 1215\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1216\r\n\u001b[1C 1217\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1218\r\n\u001b[1C 1219\u001b[1C\u001b[22m###\u001b[1Cforms.ModelFo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrm\r\n\u001b[1C\u001b[2m 1220\r\n\u001b[1C 1221\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1222\u001b[1C\u001b[22mfrom\u001b[1Cdjango\u001b[1Cimpor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt\u001b[1Cforms\r\n\u001b[1C\u001b[2m 1223\u001b[1C\u001b[22mfrom\u001b[1C.models\u001b[1Cimpo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrt\u001b[1CBlog\r\n\u001b[1C\u001b[2m 1224\r\n\u001b[1C 1225\u001b[1C\u001b[22mclass\u001b[1CBlogForm(fo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrms.ModelForm):\r\n\u001b[1C\u001b[2m 1226\u001b[1C\u001b[22m \u001b[3Cclass\u001b[1CMeta:\r\n\u001b[1C\u001b[2m 1227\u001b[1C\u001b[22m \u001b[7Cmodel\u001b[1C=\u001b[1CB\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mlog\r\n\u001b[1C\u001b[2m 1228\u001b[1C\u001b[22m \u001b[7Cfields\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m[\"name\",\u001b[1C\"tagline\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m\"]\r\n\u001b[1C\u001b[2m 1229\u001b[1C\u001b[22m \u001b[7Cwidgets\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m {\r\n\u001b[1C\u001b[2m 1230\u001b[1C\u001b[22m \u001b[11C\"name\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m\":\u001b[1Cforms.TextInpu\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt(attrs={\"class\":\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m \"form-control\"})\r\n\u001b[1C\u001b[2m 1231\u001b[1C\u001b[22m \u001b[7C}\r\n\u001b[1C\u001b[2m 1232\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1233\r\n\u001b[1C 1234\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1235\r\n\u001b[1C 1236\u001b[1C\u001b[22m###\u001b[1CЖизненный\u001b[1Cцик\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mл\u001b[1Cформы\u001b[1Cво\u001b[1Cview\r\n\u001b[1C\u001b[2m 1237\r\n\u001b[1C 1238\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1239\u001b[1C\u001b[22mfrom\u001b[1Cdjango.short\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mcuts\u001b[1Cimport\u001b[1Credir\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mect,\u001b[1Crender\r\n\u001b[1C\u001b[2m 1240\r\n\u001b[1C 1241\u001b[1C\u001b[22mdef\u001b[1Ccontact_view(\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrequest):\r\n\u001b[1C\u001b[2m 1242\u001b[1C\u001b[22m \u001b[3Cif\u001b[1Crequest.me\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mthod\u001b[1C==\u001b[1C\"POST\":\r\n\u001b[1C\u001b[2m 1243\u001b[1C\u001b[22m \u001b[7Cform\u001b[1C=\u001b[1CCo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mntactForm(request\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.POST)\r\n\u001b[1C\u001b[2m 1244\u001b[1C\u001b[22m \u001b[7Cif\u001b[1Cform.i\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ms_valid():\r\n\u001b[1C\u001b[2m 1245\u001b[1C\u001b[22m \u001b[11Cdata\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m=\u001b[1Cform.cleaned_da\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mta\r\n\u001b[1C\u001b[2m 1246\u001b[1C\u001b[22m \u001b[11Csend_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22memail(data[\"email\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m\"],\u001b[1Cdata[\"message\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m\"])\r\n\u001b[1C\u001b[2m 1247\u001b[1C\u001b[22m \u001b[11Cretur\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mn\u001b[1Credirect(\"succe\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mss\")\r\n\u001b[1C\u001b[2m 1248\u001b[1C\u001b[22m \u001b[3Celse:\r\n\u001b[1C\u001b[2m 1249\u001b[1C\u001b[22m \u001b[7Cform\u001b[1C=\u001b[1CCo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mntactForm()\r\n\u001b[1C\u001b[2m 1250\u001b[1C\u001b[22m \u001b[3Creturn\u001b[1Crender\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m(request,\u001b[1C\"contac\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt.html\",\u001b[1C{\"form\":\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m form})\r\n\u001b[1C\u001b[2m 1251\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1252\r\n\u001b[1C 1253\u001b[1C\u001b[22m1.\u001b[1C`GET`\u001b[1C—\u001b[1Cсоздат\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mь\u001b[1Cпустую\u001b[1Cформу\u001b[1C→\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mпоказать\u001b[1Cстраницу\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.\r\n\u001b[1C\u001b[2m 1254\u001b[1C\u001b[22m2.\u001b[1C`POST`\u001b[1C—\u001b[1Cсозда\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mть\u001b[1Cформу\u001b[1Cиз\u001b[1C`requ\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mest.POST`\u001b[1C→\u001b[1Cпрове\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mрить\u001b[1C→\u001b[1Cдействие\u001b[1C+\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m redirect.\r\n\u001b[1C\u001b[2m 1255\u001b[1C\u001b[22m3.\u001b[1CОшибки\u001b[1C—\u001b[1Cснова\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m показать\u001b[1Cформу\u001b[1Cс\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m сообщениями.\r\n\u001b[1C\u001b[2m 1256\r\n\u001b[1C 1257\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1258\r\n\u001b[1C 1259\u001b[1C\u001b[22m###\u001b[1CВалидация\r\n\u001b[1C\u001b[2m 1260\r\n\u001b[1C 1261\u001b[1C\u001b[22m-\u001b[1C**`is_valid()`*\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m*\u001b[1C—\u001b[1Cзапускает\u001b[1Cпро\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mверку;\u001b[1Cпосле\u001b[1Cнего\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m появляются\u001b[1C`clea\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mned_data`\u001b[1Cи\u001b[1C`erro\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrs`.\r\n\u001b[1C\u001b[2m 1262\u001b[1C\u001b[22m-\u001b[1C**`clean_<field\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mname>()`**\u001b[1C—\u001b[1Cпров\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mерка\u001b[1Cодного\u001b[1Cполя.\r\n\u001b[1C\u001b[2m 1263\u001b[1C\u001b[22m-\u001b[1C**`clean()`**\u001b[1C—\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m проверка\u001b[1Cформы\u001b[1Cц\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mеликом\u001b[1C(сравнение\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m нескольких\u001b[1Cполей\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m).\r\n\u001b[1C\u001b[2m 1264\r\n\u001b[1C 1265\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1266\u001b[1C\u001b[22mclass\u001b[1CRegisterFor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mm(forms.Form):\r\n\u001b[1C\u001b[2m 1267\u001b[1C\u001b[22m \u001b[3Cusername\u001b[1C=\u001b[1Cfo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrms.CharField(max\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m_length=50)\r\n\u001b[1C\u001b[2m 1268\u001b[1C\u001b[22m \u001b[3Cpassword\u001b[1C=\u001b[1Cfo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrms.CharField(wid\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mget=forms.Passwor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mdInput)\r\n\u001b[1C\u001b[2m 1269\u001b[1C\u001b[22m \u001b[3Cpassword_repe\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mat\u001b[1C=\u001b[1Cforms.CharFi\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22meld(widget=forms.\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mPasswordInput)\r\n\u001b[1C\u001b[2m 1270\r\n\u001b[1C 1271\u001b[1C\u001b[22m \u001b[3Cdef\u001b[1Cclean_use\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrname(self):\r\n\u001b[1C\u001b[2m 1272\u001b[1C\u001b[22m \u001b[7Cusername\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m=\u001b[1Cself.cleaned_da\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mta[\"username\"]\r\n\u001b[1C\u001b[2m 1273\u001b[1C\u001b[22m \u001b[7Cif\u001b[1Cuserna\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mme.lower()\u001b[1C==\u001b[1C\"ad\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mmin\":\r\n\u001b[1C\u001b[2m 1274\u001b[1C\u001b[22m \u001b[11Craise\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m forms.Validation\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mError(\"Это\u001b[1Cимя\u001b[1Cне\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mльзя\u001b[1Cиспользовать\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m\")\r\n\u001b[1C\u001b[2m 1275\u001b[1C\u001b[22m \u001b[7Creturn\u001b[1Cus\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mername\r\n\u001b[1C\u001b[2m 1276\r\n\u001b[1C 1277\u001b[1C\u001b[22m \u001b[3Cdef\u001b[1Cclean(sel\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mf):\r\n\u001b[1C\u001b[2m 1278\u001b[1C\u001b[22m \u001b[7Ccleaned_d\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mata\u001b[1C=\u001b[1Csuper().cle\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22man()\r\n\u001b[1C\u001b[2m 1279\u001b[1C\u001b[22m \u001b[7Cpassword\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m=\u001b[1Ccleaned_data.ge\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt(\"password\")\r\n\u001b[1C\u001b[2m 1280\u001b[1C\u001b[22m \u001b[7Cpassword_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrepeat\u001b[1C=\u001b[1Ccleaned_\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mdata.get(\"passwor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22md_repeat\")\r\n\u001b[1C\u001b[2m 1281\u001b[1C\u001b[22m \u001b[7Cif\u001b[1Cpasswo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrd\u001b[1Cand\u001b[1Cpassword_r\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mepeat\u001b[1Cand\u001b[1Cpasswor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22md\u001b[1C!=\u001b[1Cpassword_rep\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22meat:\r\n\u001b[1C\u001b[2m 1282\u001b[1C\u001b[22m \u001b[11Craise\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m forms.Validation\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mError(\"Пароли\u001b[1Cне\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mсовпадают\")\r\n\u001b[1C\u001b[2m 1283\u001b[1C\u001b[22m \u001b[7Creturn\u001b[1Ccl\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22meaned_data\r\n\u001b[1C\u001b[2m 1284\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1285\r\n\u001b[1C 1286\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1287\r\n\u001b[1C 1288\u001b[1C\u001b[22m###\u001b[1CВиджеты\u001b[1Cи\u001b[1Cпод\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mсказки\r\n\u001b[1C\u001b[2m 1289\r\n\u001b[1C 1290\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1291\u001b[1C\u001b[22mclass\u001b[1CProfileForm\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m(forms.ModelForm)\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m:\r\n\u001b[1C\u001b[2m 1292\u001b[1C\u001b[22m \u001b[3Cclass\u001b[1CMeta:\r\n\u001b[1C\u001b[2m 1293\u001b[1C\u001b[22m \u001b[7Cmodel\u001b[1C=\u001b[1CP\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrofile\r\n\u001b[1C\u001b[2m 1294\u001b[1C\u001b[22m \u001b[7Cfields\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m[\"bio\",\u001b[1C\"birth_da\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mte\"]\r\n\u001b[1C\u001b[2m 1295\u001b[1C\u001b[22m \u001b[7Cwidgets\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m {\r\n\u001b[1C\u001b[2m 1296\u001b[1C\u001b[22m \u001b[11C\"bio\"\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m:\u001b[1Cforms.Textarea(\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mattrs={\"rows\":\u001b[1C3,\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m \"placeholder\":\u001b[1C\"\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mО\u001b[1Cсебе\"}),\r\n\u001b[1C\u001b[2m 1297\u001b[1C\u001b[22m \u001b[11C\"birt\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mh_date\":\u001b[1Cforms.Da\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mteInput(attrs={\"t\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mype\":\u001b[1C\"date\"}),\r\n\u001b[1C\u001b[2m 1298\u001b[1C\u001b[22m \u001b[7C}\r\n\u001b[1C\u001b[2m 1299\u001b[1C\u001b[22m \u001b[7Clabels\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m{\"bio\":\u001b[1C\"Биографи\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mя\"}\r\n\u001b[1C\u001b[2m 1300\u001b[1C\u001b[22m \u001b[7Chelp_text\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22ms\u001b[1C=\u001b[1C{\"bio\":\u001b[1C\"Не\u001b[1Cб\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mолее\u001b[1C500\u001b[1Cсимволов\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.\"}\r\n\u001b[1C\u001b[2m 1301\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1302\r\n\u001b[1C 1303\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1304\r\n\u001b[1C 1305\u001b[1C\u001b[22m###\u001b[1CОтображение\u001b[1Cв\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m шаблоне\r\n\u001b[1C\u001b[2m 1306\r\n\u001b[1C 1307\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1308\u001b[1C\u001b[22m<form\u001b[1C\u001b[38;5;148mmethod\u001b[38;5;231m=\u001b[38;5;186m\"pos\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mt\"\u001b[38;5;231m>\r\n\u001b[1C\u001b[2m 1309\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Ccsrf_token\u001b[1C%\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m}\r\n\u001b[1C\u001b[2m 1310\u001b[1C\u001b[22m \u001b[1C{{\u001b[1Cform.as_p\u001b[1C}}\r\n\u001b[1C\u001b[2m 1311\u001b[1C\u001b[22m \u001b[1C<button\u001b[1C\u001b[38;5;148mtype\u001b[38;5;231m=\u001b[38;5;186m\"s\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mubmit\"\u001b[38;5;231m>Сохранить<\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m/button>\r\n\u001b[1C\u001b[2m 1312\u001b[1C\u001b[22m</form>\r\n\u001b[1C\u001b[2m 1313\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1314\r\n\u001b[1C 1315\u001b[1C\u001b[22m```html\r\n\u001b[1C\u001b[2m 1316\u001b[1C\u001b[22m<!--\u001b[1CРучной\u001b[1Cконтр\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mоль\u001b[1C-->\r\n\u001b[1C\u001b[2m 1317\u001b[1C\u001b[22m<form\u001b[1C\u001b[38;5;148mmethod\u001b[38;5;231m=\u001b[38;5;186m\"pos\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mt\"\u001b[38;5;231m>\r\n\u001b[1C\u001b[2m 1318\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Ccsrf_token\u001b[1C%\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m}\r\n\u001b[1C\u001b[2m 1319\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cfor\u001b[1Cfield\u001b[1Cin\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m form\u001b[1C%}\r\n\u001b[1C\u001b[2m 1320\u001b[1C\u001b[22m \u001b[3C<div>\r\n\u001b[1C\u001b[2m 1321\u001b[1C\u001b[22m \u001b[5C{{\u001b[1Cfield.la\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mbel_tag\u001b[1C}}\r\n\u001b[1C\u001b[2m 1322\u001b[1C\u001b[22m \u001b[5C{{\u001b[1Cfield\u001b[1C}}\r\n\u001b[1C\u001b[2m 1323\u001b[1C\u001b[22m \u001b[5C{%\u001b[1Cif\u001b[1Cfield\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.errors\u001b[1C%}\r\n\u001b[1C\u001b[2m 1324\u001b[1C\u001b[22m \u001b[7C<ul\u001b[1Cclass\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m=\"errors\">\r\n\u001b[1C\u001b[2m 1325\u001b[1C\u001b[22m \u001b[9C{%\u001b[1Cfor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22merror\u001b[1Cin\u001b[1Cfield.er\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrors\u001b[1C%}\r\n\u001b[1C\u001b[2m 1326\u001b[1C\u001b[22m \u001b[11C<li>{\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m{\u001b[1Cerror\u001b[1C}}</li>\r\n\u001b[1C\u001b[2m 1327\u001b[1C\u001b[22m \u001b[9C{%\u001b[1Cendf\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mor\u001b[1C%}\r\n\u001b[1C\u001b[2m 1328\u001b[1C\u001b[22m \u001b[7C</ul>\r\n\u001b[1C\u001b[2m 1329\u001b[1C\u001b[22m \u001b[5C{%\u001b[1Cendif\u001b[1C%}\r\n\u001b[1C\u001b[2m 1330\u001b[1C\u001b[22m \u001b[3C</div>\r\n\u001b[1C\u001b[2m 1331\u001b[1C\u001b[22m \u001b[1C{%\u001b[1Cendfor\u001b[1C%}\r\n\u001b[1C\u001b[2m 1332\u001b[1C\u001b[22m \u001b[1C<button\u001b[1C\u001b[38;5;148mtype\u001b[38;5;231m=\u001b[38;5;186m\"s\r\n\u001b[1C\u001b[38;5;231;2m \u001b[5C\u001b[38;5;186;22mubmit\"\u001b[38;5;231m>Сохранить<\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m/button>\r\n\u001b[1C\u001b[2m 1333\u001b[1C\u001b[22m</form>\r\n\u001b[1C\u001b[2m 1334\u001b[1C\u001b[22m```\r\n\u001b[1C\u001b[2m 1335\r\n\u001b[1C 1336\u001b[1C\u001b[22m**CSRF-токен**\u001b[1C—\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mзащита\u001b[1Cот\u001b[1CCross-S\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mite\u001b[1CRequest\u001b[1CForge\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mry:\u001b[1C`{%\u001b[1Ccsrf_toke\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mn\u001b[1C%}`\u001b[1Cобязателен\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mво\u001b[1Cвсех\u001b[1C`method=\"\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mpost\"`\u001b[1Cформах.\r\n\u001b[1C\u001b[2m 1337\r\n\u001b[1C 1338\u001b[1C\u001b[22m---\r\n\u001b[1C\u001b[2m 1339\r\n\u001b[1C 1340\u001b[1C\u001b[22m###\u001b[1CGeneric\u001b[1CEditi\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mng\u001b[1CViews\u001b[1C(CBV\u001b[1Cдля\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m CUD)\r\n\u001b[1C\u001b[2m 1341\r\n\u001b[1C 1342\u001b[1C\u001b[22m```python\r\n\u001b[1C\u001b[2m 1343\u001b[1C\u001b[22mfrom\u001b[1Cdjango.urls\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mimport\u001b[1Creverse_la\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mzy\r\n\u001b[1C\u001b[2m 1344\u001b[1C\u001b[22mfrom\u001b[1Cdjango.views\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m.generic\u001b[1Cimport\u001b[1CC\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mreateView,\u001b[1CUpdate\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mView,\u001b[1CDeleteView\r\n\u001b[1C\u001b[2m 1345\u001b[1C\u001b[22mfrom\u001b[1C.models\u001b[1Cimpo\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mrt\u001b[1CBlog\r\n\u001b[1C\u001b[2m 1346\u001b[1C\u001b[22mfrom\u001b[1C.forms\u001b[1Cimpor\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mt\u001b[1CBlogForm\r\n\u001b[1C\u001b[2m 1347\r\n\u001b[1C 1348\u001b[1C\u001b[22mclass\u001b[1CBlogCreateV\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22miew(CreateView):\r\n\u001b[1C\u001b[2m 1349\u001b[1C\u001b[22m \u001b[3Cmodel\u001b[1C=\u001b[1CBlog\r\n\u001b[1C\u001b[2m 1350\u001b[1C\u001b[22m \u001b[3Cform_class\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mBlogForm\r\n\u001b[1C\u001b[2m 1351\u001b[1C\u001b[22m \u001b[3Ctemplate_name\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m =\u001b[1C\"blog/blog_for\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mm.html\"\r\n\u001b[1C\u001b[2m 1352\u001b[1C\u001b[22m \u001b[3Csuccess_url\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m reverse_lazy(\"bl\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mog_list\")\r\n\u001b[1C\u001b[2m 1353\r\n\u001b[1C 1354\u001b[1C\u001b[22mclass\u001b[1CBlogUpdateV\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22miew(UpdateView):\r\n\u001b[1C\u001b[2m 1355\u001b[1C\u001b[22m \u001b[3Cmodel\u001b[1C=\u001b[1CBlog\r\n\u001b[1C\u001b[2m 1356\u001b[1C\u001b[22m \u001b[3Cform_class\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mBlogForm\r\n\u001b[1C\u001b[2m 1357\u001b[1C\u001b[22m \u001b[3Ctemplate_name\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m =\u001b[1C\"blog/blog_for\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mm.html\"\r\n\u001b[1C\u001b[2m 1358\u001b[1C\u001b[22m \u001b[3Csuccess_url\u001b[1C=\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m reverse_lazy(\"bl\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mog_list\")\r\n\u001b[1C\u001b[2m 1359\r\n\u001b[1C 1360\u001b[1C\u001b[22mclass\u001b[1CBlogDeleteV\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22miew(DeleteView):\r\n\u001b[1C\u001b[2m 1361\u001b[1C\u001b[22m \u001b[3Cmodel\u001b[1C=\u001b[1CBlog\r\n\u001b[1C\u001b[2m 1362\u001b[1C\u001b[22m \u001b[3Ctemplate_name\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22m =\u001b[1C\"blog/blog_con\r\n\u001b[1C\u001b[2m \u001b[5C\u001b[22mfirm_delete.html\"\r\n\u001b[1C\u001b[2m 1363\u001b[1C\u001b[22m \u001b[3Csuccess_url\u001b[1C=\r\n\u001b[39;48;5;237m \u001b[38;5;231mтеме в одну временную \u001b[39m \r\n \u001b[38;5;231mзаметку, я сделаю из неё\u001b[39m \r\n \u001b[38;5;231mpdf, потом удалю\u001b[39m \r\n\u001b[38;5;246;49m \u001b[1X\u001b[1C⎿\u001b[1X\u001b[1C Read\u001b[1X\u001b[1C\u001b[1m99\u001b[15X\r\n\u001b[5CSystem/Archive/Экзамен\r\n\u001b[5C-\u001b[1CMOC.md\u001b[22m (48\u001b[1Clines)\r\n\r\n\u001b[38;5;231m●\u001b[1C\u001b[0mСначала\u001b[1Cпрочитаю\r\n\u001b[2CINDEX.md,\u001b[1Cчтобы\u001b[1Cнайти\r\n\u001b[2Cпути\u001b[1Cко\u001b[1Cвсем\u001b[1Cзаметкам.\r\n\r\n\u001b[2C\u001b[38;5;246mRead\u001b[1C\u001b[1m1\u001b[22m file\u001b[1C(ctrl+o\u001b[1Cto\r\n\u001b[2Cexpand)\r\n\r\n\u001b[38;5;231m●\u001b[1C\u001b[0mНашёл\u001b[1Cвсе\u001b[1Cпути.\u001b[1CЧитаю\u001b[1Cвсе\r\n\u001b[2C13\u001b[1Cзаметок\u001b[1Cпараллельно.\r\n\r\n\u001b[2C\u001b[38;5;246mRead\u001b[1C\u001b[1m13\u001b[22m files\u001b[1C(ctrl+o\u001b[1Cto\r\n\u001b[2Cexpand)\r\n\r\n\u001b[38;5;231m●\u001b[1C\u001b[0mВсе\u001b[1Cзаметки\u001b[1Cпрочитаны.\r\n\u001b[2CСобираю\u001b[1Cединый\u001b[1Cконспект.\r\n\r\n\u001b[38;5;114m●\u001b[1C\u001b[39;1mWrite\u001b[0m(00\u001b[1CInbox/Экзамен\u001b[1C-\r\n\u001b[7CПолный\u001b[1Cконспект.md)\r\n\u001b[38;5;246m ⎿  \u001b[0mWrote\u001b[1C\u001b[1m1371\u001b[1C\u001b[0mlines\r\n \u001b[1C to \u001b[1m00 \r\n\u001b[5CInbox/Экзамен - \r\n\u001b[0m \u001b[1mПолный \r\n\u001b[0m \u001b[2C\u001b[1mконспект.md\r\n\u001b[0m \u001b[38;5;231;2m \u001b[22mРазработка в\r\n\u001b[2C\u001b[0m \u001b[38;5;231;2m \u001b[22mванных инфор\r\n\u001b[5C\u001b[2m \u001b[22mстемонных си\r\n\u001b[5C\u001b[2m 3\u001b[1C\u001b[22m>\u001b[1CВременная\r\n\u001b[5C\u001b[2m \u001b[2C\u001b[22mзаметка\u001b[1Cдля\r\n\u001b[5C\u001b[2m \u001b[2C\u001b[22mDF.\u001b[1CУдалить\r\n\u001b[5C\u001b[2m \u001b[2C\u001b[22mзования.поль\r\n\u001b[5C\u001b[2m 5\u001b[1C\u001b[22m---\r\n\u001b[5C\u001b[2m 7\u001b[1C\u001b[22m##\u001b[1CБлок\u001b[1C1.\u001b[1CО\r\n\u001b[5C\u001b[2m \u001b[2C\u001b[22mбщие\u001b[1Cво\r\n\u001b[5C\u001b[38;5;246m…\u001b[1C+3131\u001b[1Clines\r\n\u001b[5C(ctrl+o\u001b[1Cto\r\n\u001b[5Cexpand)\r\n\r\n\u001b[38;5;231m●\u001b[1C\u001b[0mГотово. Файл создан:\u001b[1C\u001b[38;5;153m00 \r\n\u001b[2CInbox/Экзамен - Полный \r\n\u001b[0m \u001b[38;5;153mконспект.md\u001b[0m.\r\n\r\n \u001b[1mЧто вошло\u001b[0m (все 13 заметок\r\n +\u001b[1Cдополнения\u001b[1Cиз\u001b[1Cзнаний\r\n агента):\r\n\r\n - Блок 1: Модель OSI,\r\n IPv4/маска/подсети\r\n (VLSM), IPv6, NAT, TCP vs\r\n\u001b[2C\u001b[1mlocalhost/порты, \r\n\u001b[2CHTTP/HTTPS/HTTP/3 \r\n\u001b[2Cметоды/коды, URI/URL/URN,\r\n\u001b[2COAuth 2.0\u001b[0m — их не было в\r\n\u001b[2Cзаметках,\u001b[1Cдобавил\u001b[1Cиз\r\n\u001b[2Cзнаний.\r\n\u001b[2C- Блок 2–3:\u001b[1CОсновы\u001b[1CHTML\u001b[1C—\r\n\u001b[2Cструктура, семантика,\r\n таблицы, формы полностью.\r\n - Блок 4: CSS —\r\n\u001b[2Cселекторы, специфичность,\r\n блочная модель, базовые\r\n свойства.\r\n - Блок 5:\u001b[1CFlexbox\u001b[1Cи\u001b[1CGrid,\r\n\u001b[2Cмедиазапросы.\r\n - Блок 6: Django\u001b[1Cмодели,\r\n\u001b[2Cполя,\u001b[1Cотношения\u001b[1C(включая\r\n\u001b[2Cпромежуточную\u001b[1CM2M),\r\n\u001b[2Cмиграции.\r\n\u001b[2C-\u001b[1CБлок\u001b[1C11:\u001b[1CQuerySet,\r\n\u001b[2Cfield\u001b[1Clookups,\u001b[1Cагрегации,\r\n\u001b[2CQ/F,\u001b[1CN+1\u001b[1Cи\u001b[1Cоптимизация.\r\n\u001b[2C-\u001b[1CБлок\u001b[1C7–10:\u001b[1CFBV,\u001b[1CCBV\r\n\u001b[2C(TemplateView/ListView/De\r\n\u001b[2CtailView),\u001b[1Cмаршрутизация,\r\n\u001b[2Cшаблоны,\u001b[1Cinclude,\r\n\u001b[2Cstatic,\u001b[1Cвызов\u001b[1Cметодов.\r\n\u001b[2C-\u001b[1CБлок\u001b[1C12:\u001b[1Cforms.Form,\r\n\u001b[2CModelForm,\u001b[1Cвалидация,\r\n\u001b[2Cвиджеты,\u001b[1CCSRF,\r\n\u001b[2CGenericEditingViews.\r\n\r\n\u001b[38;5;246m✻\u001b[1CSautéed\u001b[1Cfor\u001b[1C4m\u001b[1C27s\r\n\r\n※\u001b[1C\u001b[1mrecap:\u001b[1C\u001b[22;3mCreated\u001b[1Ca\u001b[1Ccombined\r\n\u001b[2Cexam\u001b[1Ccheat\u001b[1Csheet\u001b[1Cat\u001b[1C00\r\n\u001b[2CInbox/Экзамен\u001b[1C-\u001b[1CПолный\r\n\u001b[2Cконспект.md\u001b[1Cmerging\u001b[1Call\r\n\u001b[2C13\u001b[1Creferenced\u001b[1Cnotes\u001b[1Cplus\r\n\u001b[2Cgaps\u001b[1Cfilled\u001b[1Cin\u001b[1C(HTTP,\r\n\u001b[2COAuth\u001b[1C2.0,\u001b[1CURI/URL/URN,\r\n\u001b[2Clocalhost).\u001b[1CReady\u001b[1Cfor\u001b[1CPDF\r\n\u001b[2Cexport.\u001b[1C(disable\u001b[1Crecaps\r\n\u001b[2Cin\u001b[1C/config)\r\n\r\n\u001b[38;5;244;23m───────────────────────────\r\n\u001b[0m❯ \r\n\u001b[38;5;244m───────────────────────────\r\n\u001b[2C\u001b[38;5;147m⏵⏵\u001b[1Caccept\u001b[1Cedits\u001b[1Con\u001b[38;5;246m \u001b[2C·\r\n\u001b[3A\u001b[2C\u001b[0m", + "columns": 45, + "data": "\r\n\u001b[2m╭────────────────────────────────────────────\r\n──╮\r\n│ >_ \u001b[1;22mOpenAI Codex\u001b[22;2m (v0.135.0)\r\n│\r\n│\r\n│\r\n│ model: \u001b[0mgpt-5.5 medium\u001b[2m \u001b[36;22m/model\u001b[39;2m to\r\nchange │\r\n│ directory: \u001b[0m~/Documents/Vaults/SecondBrain\r\n\u001b[2m│\r\n╰────────────────────────────────────────────\r\n──╯\r\n\r\n\u001b[0m \u001b[1mTip:\u001b[0m Use /feedback to send logs to the\r\n maintainers when something looks off.\r\n\r\n\u001b[48;5;238m\u001b[45X\r\n\u001b[1;2m› \u001b[22;22mwiki \"Принцип via negativa\"\u001b[16X\r\n\u001b[45X\r\n\u001b[0m\r\n\u001b[2m• \u001b[0mСделаю по workflow \u001b[36mWiki\u001b[0m: сначала план, без\r\n\u001b[2m• \u001b[0mПлан:\r\n\r\n - Название: \u001b[36mПринцип via negativa\r\n\r\n\u001b[0m - Шаблон: \u001b[36m99 System/Template/Base Note.md\r\n\u001b[0m - Тип: \u001b[36mconcept\r\n\u001b[0m - Статус: \u001b[36mseed\r\n\u001b[0m - Разделы:\r\n - Суть принципа\r\n - Как применять\r\n - Примеры\r\n - Ошибки применения\r\n - Связанные идеи\r\n\r\n - Предполагаемые wikilinks: \u001b[36m[[Ментальные\r\n\u001b[0m \u001b[36mмодели]]\u001b[0m, \u001b[36m[[Принятие решений]]\u001b[0m,\r\n \u001b[36m[[Минимализм]]\u001b[0m, если такие заметки есть.\r\n\r\n\u001b[48;5;238m\u001b[45X\r\n\u001b[1;2m› \u001b[22;22mдавай\r\n\r\n\u001b[0m\u001b[45X\r\n\u001b[2m• \u001b[0mПроверяю индекс и шаблон, чтобы не создать\r\n дубль и попасть в существующий стиль vault.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m INDEX.md\u001b[2m, \u001b[0mBase Note.md\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"via negativa|негатив|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mМинимализм|Ментальные модели|Принятие\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mрешений\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99 System/INDEX.md'\r\n\u001b[39;2m └ 0 matches for 'via negativa|негатив|\r\n\u001b[0m \u001b[2mМинимализм|Ментальные модели|Принятие\r\n\u001b[0m \u001b[2mрешений'\r\n\r\n─────────────────────────────────────────────\r\n\u001b[0m \u001b[36mLibrary\u001b[0m, затем создам одну заметку и\r\n пересоберу индекс.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mList\u001b[0m 90 Library\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"^## 90 Library/(Other|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mSelf|Psychology|Philosophy|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mProductivity|Programming|Sport|Math|\r\n\u001b[39;2m │ … +1 lines\r\n └ 14 matches in 1F:\r\n\r\n … +15 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m 575: ## 90 Library/Sport\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"decision|решени|минимал|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mмодель|мышлен|принцип|Талеб|Антихруп\"\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m'99 System/INDEX.md'\r\n\u001b[39;2m └ 6 matches in 2F:\r\n\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m INDEX.md\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m find .\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mpath\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'./.git'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mprune\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m-\u001b[38;2;235;160;172mpath\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'./.obsidian'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mprune\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m'*Антихрупкость*'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mprint\r\n\u001b[39;2m └ rtk: rtk find does not support compound\r\n\u001b[0m \u001b[2mpredicates or actions (e.g. -not, -exec).\r\n\u001b[0m \u001b[2mUse `find` directly.\r\n\r\n\u001b[31;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m find .\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mmaxdepth\u001b[38;2;205;214;244m 3\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mtype\u001b[38;2;205;214;244m f\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m'*INDEX*'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'*index*'\r\n\u001b[39;2m └ rtk: rtk find does not support compound\r\n\u001b[0m \u001b[2mpredicates or actions (e.g. -not, -exec).\r\n\u001b[0m \u001b[2mUse `find` directly.\r\n\r\n─────────────────────────────────────────────\r\n\r\n• \u001b[36;22mOther\u001b[0m подходит: отдельного раздела для\r\n саморазвития нет. Свяжу заметку с уже\r\n существующей \u001b[36m[[Антихрупкость как\r\n\u001b[0m \u001b[36mуправляемая асимметрия]]\u001b[0m, если файл\r\n подтвердится.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m INDEX.md\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250m/usr/bin/find\u001b[38;2;205;214;244m .\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mpath\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'./.git'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mprune\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m-\u001b[38;2;235;160;172mo\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mpath\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'./.obsidian'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mprune\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m'*Антихрупкость*'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mprint\r\n\u001b[39;2m └ ./90 Library/Finance/Инвестиции/\r\n\u001b[0m \u001b[2mАнтихрупкость как управляемая\r\n\u001b[0m \u001b[2mасимметрия.md\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250m/usr/bin/find\u001b[38;2;205;214;244m .\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mmaxdepth\u001b[38;2;205;214;244m 4\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mtype\u001b[38;2;205;214;244m f\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m-\u001b[38;2;235;160;172mname\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'*.py'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'*index*'\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m-\u001b[38;2;235;160;172mname\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'*INDEX*'\r\n\u001b[39;2m └ ./.obsidian/\r\n\u001b[0m \u001b[2mcopilot-index-0dacfb0c891663cf5a46e2446cb\r\n … +4 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m./.git/index\r\n\u001b[0m \u001b[2m./.stversions/.git/index~20260522-221821\r\n\r\n─────────────────────────────────────────────\r\n\r\n• \u001b[0mСоздаю заметку в \u001b[36m90 Library/Other/\u001b[0m и правлю\r\n индекс только в двух местах: счётчик и\r\n строка новой заметки.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 2 files (\u001b[32m+49\u001b[0m \u001b[31m-2\u001b[0m)\r\n\u001b[2m └ \u001b[0m90 Library/Other/Принцип via negativa.md\r\n\u001b[2m \u001b[0m(\u001b[32m+46\u001b[0m \u001b[31m-0\u001b[0m)\r\n\u001b[48;5;22m \u001b[2m 1 \u001b[32;22m+\u001b[38;2;147;153;178m---\u001b[34X\r\n\u001b[39m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mtitle: Принцип via negativa\r\n\u001b[39m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: seed\r\n\u001b[39m \u001b[2m 4 \u001b[32;22m+\u001b[38;2;205;214;244mtype: concept\r\n\u001b[39m \u001b[2m 5 \u001b[32;22m+\u001b[38;2;205;214;244mtags: [selfdev, decision-making, thin\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mking]\r\n\u001b[39m \u001b[2m 6 \u001b[32;22m+\u001b[38;2;205;214;244mcreated: 2026-06-01\r\n\u001b[39m \u001b[2m 7 \u001b[32;22m+\u001b[38;2;205;214;244mupdated: 2026-06-01\r\n\u001b[39m \u001b[2m 8 \u001b[32;22m+\u001b[38;2;205;214;244maliases: [\"via negativa\", \"негативный\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m путь\"]\r\n\u001b[39m \u001b[2m 9 \u001b[32;22m+\u001b[38;2;147;153;178m---\r\n\u001b[39m \u001b[2m10 \u001b[32;22m+\r\n\u001b[39m \u001b[2m11 \u001b[32;22m+\u001b[38;2;147;153;178m#\u001b[38;2;243;139;168m \u001b[38;2;148;226;213mПринцип via negativa\r\n\u001b[39m \u001b[2m12 \u001b[32;22m+\r\n\u001b[39m \u001b[2m13 \u001b[32;22m+\u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mVia negativa\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m — способ улучшать си\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mстему через удаление вредного, лишнег\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mо или хрупкого, а не через добавление\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m нового.\r\n\u001b[39m \u001b[2m14 \u001b[32;22m+\r\n\u001b[39m \u001b[2m15 \u001b[32;22m+\u001b[38;2;205;214;244mКороткая формула: сначала убрать то,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mчто мешает.\r\n\u001b[39m \u001b[2m16 \u001b[32;22m+\r\n\u001b[39m \u001b[2m17 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mСуть\r\n\u001b[39m \u001b[2m18 \u001b[32;22m+\r\n\u001b[39m \u001b[2m19 \u001b[32;22m+\u001b[38;2;205;214;244mПринцип исходит из того, что вред час\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mто заметнее и доказуемее пользы. Прощ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mе понять, что ухудшает здоровье, рабо\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mту, мышление или систему, чем точно п\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mредсказать, какое новое действие даст\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m улучшение.\r\n\u001b[39m \u001b[2m20 \u001b[32;22m+\r\n\u001b[39m \u001b[2m21 \u001b[32;22m+\u001b[38;2;205;214;244mВместо вопроса «что добавить?» задаёт\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mся вопрос: «что убрать, чтобы стало л\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mучше?»\r\n\u001b[39m \u001b[2m22 \u001b[32;22m+\r\n\u001b[39m \u001b[2m23 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mКак применять\r\n\u001b[39m \u001b[2m24 \u001b[32;22m+\r\n\u001b[39m \u001b[2m25 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Убрать очевидный вред: лишние обяза\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтельства, шум, плохие привычки, ненуж\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mные зависимости.\r\n\u001b[39m \u001b[2m26 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Сократить сложность: меньше правил,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m меньше ручных шагов, меньше точек от\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mказа.\r\n\u001b[39m \u001b[2m27 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Не лечить симптом новым слоем, если\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m можно удалить причину.\r\n\u001b[39m \u001b[2m28 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Предпочитать простое отсутствие вре\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mда сомнительной оптимизации.\r\n\u001b[39m \u001b[2m29 \u001b[32;22m+\r\n\u001b[39m \u001b[2m30 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mПримеры\r\n\u001b[39m \u001b[2m31 \u001b[32;22m+\r\n\u001b[39m \u001b[2m32 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Здоровье: сначала убрать недосып, п\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mереедание и алкоголь, а не искать доб\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mавки.\r\n\u001b[39m \u001b[2m33 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Работа: удалить лишние встречи и пе\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mреключения, а не внедрять новую систе\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mму продуктивности.\r\n\u001b[39m \u001b[2m34 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Код: убрать мёртвую ветку и дублиро\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mвание, а не добавлять абстракцию пове\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрх них.\r\n\u001b[39m \u001b[2m35 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Инвестиции: ограничить катастрофиче\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mский риск, а не пытаться угадать макс\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mимальную доходность.\r\n\u001b[39m \u001b[2m36 \u001b[32;22m+\r\n\u001b[39m \u001b[2m37 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mОшибки применения\r\n\u001b[39m \u001b[2m38 \u001b[32;22m+\r\n\u001b[39m \u001b[2m39 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Путать via negativa с пассивностью.\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m Удаление лишнего — тоже действие.\r\n\u001b[39m \u001b[2m40 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Удалять без понимания функции элеме\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mнта. Не всё сложное является лишним.\r\n\u001b[39m \u001b[2m41 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Использовать принцип как запрет на\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mразвитие. Иногда нужно не только убра\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mть вред, но и создать недостающую спо\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mсобность.\r\n\u001b[39m \u001b[2m42 \u001b[32;22m+\r\n\u001b[39m \u001b[2m43 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mСвязанные идеи\r\n\u001b[39m \u001b[2m44 \u001b[32;22m+\r\n\u001b[39m \u001b[2m45 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[Антихрупкость как управляемая аси\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mмметрия]] — близкая идея: важнее огра\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mничить downside и оставить возможност\r\n\u001b[39;49;2m └ \u001b[0m99 System/INDEX.md (\u001b[32m+3\u001b[0m \u001b[31m-2\u001b[0m)\u001b[15X\r\n \u001b[2m 2 \u001b[0m \u001b[38;2;205;214;244mgenerated: 2026-06-01\r\n\u001b[39;48;5;52m \u001b[2m 3 \u001b[31;22m-\u001b[38;2;205;214;244;2mtotal: 481\u001b[26X\r\n\u001b[39;48;5;22;22m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mtotal: 482\u001b[26X\r\n\u001b[0m \u001b[2m 4 \u001b[0m \u001b[38;2;147;153;178m---\u001b[33X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m 11 \u001b[0m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m----------\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m----------\u001b[38;2;147;153;178m|\r\n\u001b[39;48;5;52m \u001b[2m 12 \u001b[31;22m-\u001b[38;2;147;153;178;2m|\u001b[38;2;205;214;244m Всего заметок \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m 481 \u001b[38;2;147;153;178m|\u001b[13X\r\n\u001b[39;48;5;22;22m \u001b[2m 12 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Всего заметок \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m 482 \u001b[38;2;147;153;178m|\u001b[13X\r\n\u001b[0m \u001b[2m 13\u001b[38X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m524 \u001b[0m \u001b[38;2;205;214;244m| [[Гайд на научников]] | Гайд на на\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mучников | stable | knowledge | [othe\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mr] |\r\n\u001b[39;48;5;22m \u001b[2m525 \u001b[32;22m+\u001b[38;2;205;214;244m| [[Принцип via negativa]] | via neg\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mativa, негативный путь | seed | conc\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mept | [selfdev, decision-making, thi\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mnking] |\r\n\u001b[0m \u001b[2m526\u001b[38X\r\n\r\n─────────────────────────────────────────────\r\n\r\n• \u001b[0mПроверяю результат: файл, frontmatter и\r\n строку в индексе.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Принцип via negativa.md\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"Принцип via negativa|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mtotal: 482|Всего заметок \\| 482\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mSystem/INDEX.md'\r\n\u001b[39;2m └ 3 matches in 2F:\r\n\r\n … +7 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mconcept |...\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git diff\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90 Library/Other/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПринцип via negativa.md'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99 System/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mINDEX.md'\r\n\u001b[39;2m └ 99 System/INDEX.md | 5 +++--\r\n\u001b[0m \u001b[2m 1 file changed, 3 insertions(+), 2\r\n … +24 lines (ctrl + t to view transcript)\r\n\r\n\u001b[0m \u001b[2m +3 -2\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git status\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mshort\r\n\u001b[39;2m └ M .obsidian/workspace.json\r\n\u001b[0m \u001b[2m M \"99 System/INDEX.md\"\r\n\u001b[0m \u001b[2m?? \"90 Library/Other/Принцип via\r\n\u001b[0m \u001b[2mnegativa.md\"\r\n\r\n─────────────────────────────────────────────\r\n\r\n• \u001b[0mГотово.\r\n\r\n Создана заметка: \u001b[36m90 Library/Other/Принцип\r\n\u001b[0m \u001b[36mvia negativa.md\r\n\r\n\u001b[0m Обновлён индекс: \u001b[36m99 System/INDEX.md\r\n\r\n\u001b[0m Добавленные связи:\r\n\r\n - \u001b[36m[[Антихрупкость как управляемая\r\n\u001b[0m \u001b[36mасимметрия]]\r\n\r\n\u001b[0m - \u001b[36m[[Other - MOC]]\r\n\r\n\u001b[0m Проверка: файл читается, строка в индексе\r\n есть, счётчик обновлён до \u001b[36m482\u001b[0m. Несвязанная\r\n правка \u001b[36m.obsidian/workspace.json\u001b[0m уже была в\r\n worktree, я её не трогал.\r\n\r\n\u001b[2m─ Worked for 1m 06s ─────────────────────────\r\n\r\n\u001b[48;5;238;22m \u001b[44X\r\n\u001b[1m›\u001b[22m \u001b[2mImprove documentation in @filename\r\n\u001b[22m \r\n\u001b[0m\u001b[2X\u001b[2C\u001b[38;2;246;226;183mgpt-5.5 medium\u001b[39;2m · \u001b[38;2;171;223;167;22m~/Documents/Vaults/Second…\u001b[2A\u001b[43D\u001b[0m", "rows": 34, "scrollLine": -1 } @@ -151,7 +151,7 @@ }, "pinned": true, "icon": "terminal", - "title": "Terminal: ✳ Объединить конспекты экзамена MOC в одну заметку" + "title": "Terminal: SecondBrain" } }, { @@ -220,8 +220,7 @@ } ], "direction": "horizontal", - "width": 296, - "collapsed": true + "width": 452 }, "left-ribbon": { "hiddenItems": { @@ -242,8 +241,10 @@ "terminal:Open terminal": false } }, - "active": "3b12849ac67beebf", + "active": "06940eb960fc1db5", "lastOpenFiles": [ + "90 Library/Other/Принцип via negativa.md", + "GEMINI.md", "00 Inbox/Экзамен - Полный конспект.md", "00 Inbox/Экзамен - Полный конспект.md.tmp.79011.13e6fc558bcf", "99 System/Archive/Экзамен - MOC.md", @@ -266,7 +267,6 @@ "90 Library/Programming/Python/Объектно-ориентированное программирование.md", "00 Inbox/ЭкАнализ.pdf", "00 Inbox/Материал по Экономическому анализу.md", - "GEMINI.md", "AGENTS.md", "00 Inbox/Bitrix AO il.md", "90 Library/Programming/Ruby On Rails/Rails 8 Migration Guide.md", @@ -275,7 +275,6 @@ "90 Library/Programming/Ruby On Rails/Deploy - finreport-analyzer.md.tmp.236926.95a7bebd66b4", "90 Library/Programming/Ruby On Rails/Deploy - finreport-analyzer.md", "00 Inbox/Rails 8 Migration Guide.md", - "00 Inbox/Deploy - finreport-analyzer.md", "99 System/Archive/Экзамен.pdf", "update_index.py", "migrate_titles.py", diff --git a/90 Library/Other/Принцип via negativa.md b/90 Library/Other/Принцип via negativa.md new file mode 100644 index 0000000..a58c593 --- /dev/null +++ b/90 Library/Other/Принцип via negativa.md @@ -0,0 +1,46 @@ +--- +title: Принцип via negativa +status: seed +type: concept +tags: [selfdev, decision-making, thinking] +created: 2026-06-01 +updated: 2026-06-01 +aliases: ["via negativa", "негативный путь"] +--- + +# Принцип via negativa + +**Via negativa** — способ улучшать систему через удаление вредного, лишнего или хрупкого, а не через добавление нового. + +Короткая формула: сначала убрать то, что мешает. + +## Суть + +Принцип исходит из того, что вред часто заметнее и доказуемее пользы. Проще понять, что ухудшает здоровье, работу, мышление или систему, чем точно предсказать, какое новое действие даст улучшение. + +Вместо вопроса «что добавить?» задаётся вопрос: «что убрать, чтобы стало лучше?» + +## Как применять + +- Убрать очевидный вред: лишние обязательства, шум, плохие привычки, ненужные зависимости. +- Сократить сложность: меньше правил, меньше ручных шагов, меньше точек отказа. +- Не лечить симптом новым слоем, если можно удалить причину. +- Предпочитать простое отсутствие вреда сомнительной оптимизации. + +## Примеры + +- Здоровье: сначала убрать недосып, переедание и алкоголь, а не искать добавки. +- Работа: удалить лишние встречи и переключения, а не внедрять новую систему продуктивности. +- Код: убрать мёртвую ветку и дублирование, а не добавлять абстракцию поверх них. +- Инвестиции: ограничить катастрофический риск, а не пытаться угадать максимальную доходность. + +## Ошибки применения + +- Путать via negativa с пассивностью. Удаление лишнего — тоже действие. +- Удалять без понимания функции элемента. Не всё сложное является лишним. +- Использовать принцип как запрет на развитие. Иногда нужно не только убрать вред, но и создать недостающую способность. + +## Связанные идеи + +- [[Антихрупкость как управляемая асимметрия]] — близкая идея: важнее ограничить downside и оставить возможность для upside. +- [[Other - MOC]] diff --git a/99 System/INDEX.md b/99 System/INDEX.md index 41386f9..540d1e5 100644 --- a/99 System/INDEX.md +++ b/99 System/INDEX.md @@ -1,6 +1,6 @@ --- generated: 2026-06-01 -total: 481 +total: 482 --- # Vault Index @@ -9,7 +9,7 @@ total: 481 | Параметр | Значение | |----------|----------| -| Всего заметок | 481 | +| Всего заметок | 482 | ## ./ @@ -522,6 +522,7 @@ total: 481 | [[Kyocera FS-1020MFP — ошибки]] | Kyocera FS-1020MFP — ошибки | seed | guide | [other, printer, kyocera] | | [[Other - MOC]] | Other - MOC | seed | moc | [other, misc] | | [[Гайд на научников]] | Гайд на научников | stable | knowledge | [other] | +| [[Принцип via negativa]] | via negativa, негативный путь | seed | concept | [selfdev, decision-making, thinking] | ## 90 Library/Programming