{"id":4982,"date":"2025-02-07T08:46:00","date_gmt":"2025-02-06T23:46:00","guid":{"rendered":"https:\/\/secondlife.lol\/?p=4982"},"modified":"2025-02-08T22:28:33","modified_gmt":"2025-02-08T13:28:33","slug":"mastering-django-16-generic-views","status":"publish","type":"post","link":"https:\/\/secondlife.lol\/ja\/mastering-django-16-generic-views\/","title":{"rendered":"Django\u30de\u30b9\u30bf\u30fc\u306e\u9053: 16\u7a2e\u985e\u306e\u30b8\u30a7\u30cd\u30ea\u30c3\u30af\u30d3\u30e5\u30fc\u3067Web\u958b\u767a\u52b9\u7387\u3092\u6700\u5927\u5316\u3059\u308b"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\uc548\ub155\ud558\uc138\uc694, \uc5f4\uc815 \uac00\ub4dd\ud55c <a href=\"http:\/\/djangoproject.com\" target=\"_blank\" rel=\"noopener\">Django<\/a> \uac1c\ubc1c\uc790 \uc5ec\ub7ec\ubd84! \uc624\ub298\uc740 \uc815\ub9d0 \ud765\ubbf8\uc9c4\uc9c4\ud55c \uc8fc\uc81c\ub97c \uac00\uc9c0\uace0 \uc654\uc2b5\ub2c8\ub2e4. \ubc14\ub85c &#8220;\uc81c\ub124\ub9ad \ubdf0 16\uac00\uc9c0&#8221;\uc5d0 \ub300\ud574 \uae4a\uc774 \uc788\uac8c \ud30c\ud5e4\uccd0 \ubcfc \uac74\ub370\uc694. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec\ubd84\ub3c4 \uc544\uc2dc\ub2e4\uc2dc\ud53c, Django\ub85c \uc6f9 \uac1c\ubc1c\uc744 \ud558\ub2e4 \ubcf4\uba74 \ubc18\ubcf5\ub418\ub294 \ucf54\ub4dc \ub54c\ubb38\uc5d0 \uc88c\uc808\uac10\uc744 \ub290\ub084 \ub54c\uac00 \uc788\uc8e0. \ud558\uc9c0\ub9cc \uac71\uc815 \ub9c8\uc138\uc694! Django\uc758 \uc81c\ub124\ub9ad \ubdf0\ub97c \ub9c8\uc2a4\ud130\ud558\uba74 \uadf8\ub7f0 \uace0\ubbfc\uc740 \ub208 \ub179\ub4ef\uc774 \uc0ac\ub77c\uc9c8 \uac70\uc608\uc694.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 Django\uc758 \uc81c\ub124\ub9ad \ubdf0 16\uac00\uc9c0 \uac01\uac01\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uace0, \uc2e4\uc81c \ucf54\ub4dc \uc608\uc81c\uc640 \ud568\uaed8 \uc5b4\ub5bb\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\ub294\uc9c0 \uc0b4\ud3b4\ubcfc \uac70\uc608\uc694. \ucd08\ubcf4\uc790\ubd80\ud130 \uc911\uae09\uc790\uae4c\uc9c0 \ubaa8\ub450\uac00 \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc27d\uac8c \uc124\uba85\ud574\ub4dc\ub9b4 \ud14c\ub2c8, \ub05d\uae4c\uc9c0 \ud568\uaed8\ud574 \uc8fc\uc138\uc694!<\/p>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title-wrap{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title-wrap{color:var(--global-palette2, #2B6CB0);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{color:var(--global-palette2, #2B6CB0);font-size:28px;font-weight:regular;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap .kb-table-of-content-list{color:var(--global-palette1, #3182CE);line-height:2em;font-weight:regular;font-style:normal;margin-top:var(--global-kb-spacing-sm, 1.5rem);margin-right:0px;margin-bottom:0px;margin-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap .kb-table-of-content-list .kb-table-of-contents__entry:hover{color:var(--global-palette6, #718096);}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);}}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{font-size:28px;}}@media all and (max-width: 767px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{font-size:28px;}}<\/style>\n\n<style>.kb-image4982_438e44-d6 .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image4982_438e44-d6 img.kb-img, .kb-image4982_438e44-d6 .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image4982_438e44-d6\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"600\" height=\"428\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/02\/image-4-4-600x428.jpg\" alt=\"\uc81c\ub124\ub9ad \ubdf0 16\uac00\uc9c0\" class=\"kb-img wp-image-5024\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/02\/image-4-4-600x428.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/02\/image-4-4-300x214.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/02\/image-4-4-768x547.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/02\/image-4-4-18x12.jpg 18w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/02\/image-4-4.jpg 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>( Django \uc81c\ub124\ub9ad \ubdf0 16\uac00\uc9c0 )<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Django \uc81c\ub124\ub9ad \ubdf0\uc758 \ub9c8\ubc95: 16\uac00\uc9c0 \ubdf0 \uc644\uc804 \uc815\ubcf5<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Django\uc758 \uc81c\ub124\ub9ad \ubdf0\ub294 \uc6f9 \uac1c\ubc1c\uc5d0\uc11c \uc790\uc8fc \uc0ac\uc6a9\ub418\ub294 \ud328\ud134\uc744 \ucd94\uc0c1\ud654\ud558\uc5ec \uac1c\ubc1c\uc790\uc758 \uc0dd\uc0b0\uc131\uc744 \ud06c\uac8c \ud5a5\uc0c1\uc2dc\ud0a4\ub294 \ub9c8\ubc95 \uac19\uc740 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc774 \uc81c\ub124\ub9ad \ubdf0 16\uac00\uc9c0\ub97c \ub9c8\uc2a4\ud130\ud558\uba74, \uc5ec\ub7ec\ubd84\uc758 Django \uac1c\ubc1c \uc2e4\ub825\uc740 \ud55c \ub2e8\uacc4 \ub354 \uc5c5\uadf8\ub808\uc774\ub4dc\ub420 \uac70\uc608\uc694. \uc790, \uc774\uc81c \ud558\ub098\uc529 \uc0b4\ud3b4\ubcfc\uae4c\uc694?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ud14c\uc774\ube14\uc740 Django\uc758 \uc81c\ub124\ub9ad \ubdf016\uac00\uc9c0\ub97c \ud55c\ub208\uc5d0 \ubcfc \uc218 \uc788\uac8c \uc815\ub9ac\ud55c \uac83\uc785\ub2c8\ub2e4. \uac01 \ubdf0\uc758 \ubd84\ub958, \uc774\ub984, \uadf8\ub9ac\uace0 \uc8fc\uc694 \uae30\ub2a5\uc744 \uac04\ub2e8\ud788 \uc124\uba85\ud558\uace0 \uc788\uc5b4 \uc81c\ub124\ub9ad \ubdf0\uc758 \uc804\uccb4\uc801\uc778 \uad6c\uc870\uc640 \uc6a9\ub3c4\ub97c \uc27d\uac8c \ud30c\uc545\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\uc81c\ub124\ub9ad \ubdf0 \ubd84\ub958<\/th><th>\uc81c\ub124\ub9ad \ubdf0 \uc774\ub984<\/th><th>\ubdf0\uc758 \uae30\ub2a5(\uc5ed\ud560)<\/th><\/tr><\/thead><tbody><tr><td>Base View<\/td><td>View<\/td><td>\uae30\ubcf8 \ubdf0 \ud074\ub798\uc2a4, HTTP \uba54\uc11c\ub4dc\uc5d0 \ub530\ub978 \ucc98\ub9ac<\/td><\/tr><tr><td>Base View<\/td><td>TemplateView<\/td><td>\uc9c0\uc815\ub41c \ud15c\ud50c\ub9bf \ub80c\ub354\ub9c1<\/td><\/tr><tr><td>Base View<\/td><td>RedirectView<\/td><td>\ub2e4\ub978 URL\ub85c \ub9ac\ub2e4\uc774\ub809\ud2b8<\/td><\/tr><tr><td>Generic Display View<\/td><td>ListView<\/td><td>\uac1d\uccb4 \ubaa9\ub85d \ud45c\uc2dc<\/td><\/tr><tr><td>Generic Display View<\/td><td>DetailView<\/td><td>\ub2e8\uc77c \uac1d\uccb4\uc758 \uc0c1\uc138 \uc815\ubcf4 \ud45c\uc2dc<\/td><\/tr><tr><td>Generic Edit View<\/td><td>FormView<\/td><td>\ud3fc \ucc98\ub9ac<\/td><\/tr><tr><td>Generic Edit View<\/td><td>CreateView<\/td><td>\uc0c8\ub85c\uc6b4 \uac1d\uccb4 \uc0dd\uc131<\/td><\/tr><tr><td>Generic Edit View<\/td><td>UpdateView<\/td><td>\uae30\uc874 \uac1d\uccb4 \uc218\uc815<\/td><\/tr><tr><td>Generic Edit View<\/td><td>DeleteView<\/td><td>\uac1d\uccb4 \uc0ad\uc81c<\/td><\/tr><tr><td>Generic Date View<\/td><td>ArchiveIndexView<\/td><td>\ub0a0\uc9dc\ubcc4 \ucd5c\uc2e0 \uac1d\uccb4 \ubaa9\ub85d \ud45c\uc2dc<\/td><\/tr><tr><td>Generic Date View<\/td><td>YearArchiveView<\/td><td>\ud2b9\uc815 \ub144\ub3c4\uc758 \uac1d\uccb4 \ubaa9\ub85d \ud45c\uc2dc<\/td><\/tr><tr><td>Generic Date View<\/td><td>MonthArchiveView<\/td><td>\ud2b9\uc815 \uc6d4\uc758 \uac1d\uccb4 \ubaa9\ub85d \ud45c\uc2dc<\/td><\/tr><tr><td>Generic Date View<\/td><td>WeekArchiveView<\/td><td>\ud2b9\uc815 \uc8fc\uc758 \uac1d\uccb4 \ubaa9\ub85d \ud45c\uc2dc<\/td><\/tr><tr><td>Generic Date View<\/td><td>DayArchiveView<\/td><td>\ud2b9\uc815 \uc77c\uc758 \uac1d\uccb4 \ubaa9\ub85d \ud45c\uc2dc<\/td><\/tr><tr><td>Generic Date View<\/td><td>TodayArchiveView<\/td><td>\uc624\ub298 \ub0a0\uc9dc\uc758 \uac1d\uccb4 \ubaa9\ub85d \ud45c\uc2dc<\/td><\/tr><tr><td>Generic Date View<\/td><td>DateDetailView<\/td><td>\ud2b9\uc815 \ub0a0\uc9dc\uc758 \uac1d\uccb4 \uc0c1\uc138 \uc815\ubcf4 \ud45c\uc2dc<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">1. View: \ubaa8\ub4e0 \uac83\uc758 \uc2dc\uc791\uc810<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">View\ub294 \ubaa8\ub4e0 \ud074\ub798\uc2a4 \uae30\ubc18 \ubdf0\uc758 \uae30\ubcf8\uc774 \ub418\ub294 \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4. \ub2e4\ub978 \ubaa8\ub4e0 \uc81c\ub124\ub9ad \ubdf0\ub4e4\uc774 \uc774 View \ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ubc1b\uc544 \ub9cc\ub4e4\uc5b4\uc84c\uc8e0. \uac04\ub2e8\ud55c \uc608\uc81c\ub97c \ud1b5\ud574 View\uc758 \uc0ac\uc6a9\ubc95\uc744 \uc54c\uc544\ubd05\uc2dc\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views import View\nfrom django.http import HttpResponse\n\nclass MyView(View):\n    def get(self, request):\n        return HttpResponse('Hello, Django world!')\n\n    def post(self, request):\n        return HttpResponse('POST Request.')<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views\uc5d0\uc11c View \ud074\ub798\uc2a4\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>HttpResponse\ub97c \uc784\ud3ec\ud2b8\ud558\uc5ec HTTP \uc751\ub2f5\uc744 \ubc18\ud658\ud560 \uc218 \uc788\uac8c \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>MyView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 View \ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>get \uba54\uc11c\ub4dc\ub97c \uc815\uc758\ud558\uc5ec GET \uc694\uccad\uc744 \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>post \uba54\uc11c\ub4dc\ub97c \uc815\uc758\ud558\uc5ec POST \uc694\uccad\uc744 \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uac04\ub2e8\ud55c \uc608\uc81c\ub9cc\uc73c\ub85c\ub3c4 View \ud074\ub798\uc2a4\uc758 \uac15\ub825\ud568\uc744 \ub290\ub084 \uc218 \uc788\uc8e0? HTTP \uba54\uc11c\ub4dc\uc5d0 \ub530\ub77c \ub2e4\ub978 \ub85c\uc9c1\uc744 \uc27d\uac8c \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. TemplateView: \uc815\uc801 \ud398\uc774\uc9c0\uc758 \uac15\uc790<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">TemplateView\ub294 \ub2e8\uc21c\ud788 \ud15c\ud50c\ub9bf\uc744 \ub80c\ub354\ub9c1\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub3d9\uc801 \ub370\uc774\ud130 \ucc98\ub9ac\uac00 \ud544\uc694 \uc5c6\ub294 \uc815\uc801 \ud398\uc774\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\uc8e0.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic import TemplateView\n\nclass HomePageView(TemplateView):\n    template_name = \"home.html\"\n\n    def get_context_data(self, **kwargs):\n        context = super().get_context_data(**kwargs)\n        context&#91;'welcome_message'] = \"Welcome to Django.\"\n        return context<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic\uc5d0\uc11c TemplateView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>HomePageView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 TemplateView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>template_name \uc18d\uc131\uc744 \uc124\uc815\ud558\uc5ec \uc0ac\uc6a9\ud560 \ud15c\ud50c\ub9bf\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>get_context_data \uba54\uc11c\ub4dc\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud558\uc5ec \ucd94\uac00\uc801\uc778 \ucee8\ud14d\uc2a4\ud2b8 \ub370\uc774\ud130\ub97c \uc804\ub2ec\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>super()\ub97c \ud638\ucd9c\ud558\uc5ec \uae30\ubcf8 \ucee8\ud14d\uc2a4\ud2b8 \ub370\uc774\ud130\ub97c \uac00\uc838\uc635\ub2c8\ub2e4.<\/li>\n\n\n\n<li>&#8216;welcome_message&#8217; \ud0a4\ub85c \ud658\uc601 \uba54\uc2dc\uc9c0\ub97c \ucee8\ud14d\uc2a4\ud2b8\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 &#8216;home.html&#8217; \ud15c\ud50c\ub9bf\uc5d0\uc11c <a href=\"https:\/\/secondlife.lol\/django-templates-basics-for-beginners\/\" data-type=\"post\" data-id=\"4750\">{{ welcome_message }}<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud658\uc601 \uba54\uc2dc\uc9c0\ub97c \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc815\ub9d0 \uac04\ub2e8\ud558\uc8e0?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. RedirectView: URL \uc774\ub3d9\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">RedirectView\ub294 \uc0ac\uc6a9\uc790\ub97c \ub2e4\ub978 URL\ub85c \ub9ac\ub2e4\uc774\ub809\ud2b8\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. URL \ub2e8\ucd95\uc774\ub098 \uc624\ub798\ub41c URL\uc744 \uc0c8 URL\ub85c \ub9ac\ub2e4\uc774\ub809\ud2b8\ud560 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\ub2f5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic import RedirectView\n\nclass OldUrlRedirectView(RedirectView):\n    url = '\/new-awesome-page\/'\n    permanent = True<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic\uc5d0\uc11c RedirectView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>OldUrlRedirectView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 RedirectView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>url \uc18d\uc131\uc744 \uc124\uc815\ud558\uc5ec \ub9ac\ub2e4\uc774\ub809\ud2b8\ud560 \ub300\uc0c1 URL\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>permanent\ub97c True\ub85c \uc124\uc815\ud558\uc5ec \uc601\uad6c\uc801\uc778 \ub9ac\ub2e4\uc774\ub809\ud2b8(301)\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \uc624\ub798\ub41c URL\ub85c \uc811\uadfc\ud558\ub294 \uc0ac\uc6a9\uc790\ub97c \uc790\ub3d9\uc73c\ub85c \uc0c8\ub85c\uc6b4 \ud398\uc774\uc9c0\ub85c \uc548\ub0b4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. SEO\uc5d0\ub3c4 \uc88b\uace0, \uc0ac\uc6a9\uc790 \uacbd\ud5d8\ub3c4 \uac1c\uc120\ud560 \uc218 \uc788\uc8e0!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. ListView: \ubaa9\ub85d \ud45c\uc2dc\uc758 \ucc54\ud53c\uc5b8<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ListView\ub294 \uac1d\uccb4\ub4e4\uc758 \ubaa9\ub85d\uc744 \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uc81c\ub124\ub9ad \ubdf0\uc785\ub2c8\ub2e4. \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8 \ubaa9\ub85d\uc774\ub098 \uc81c\ud488 \uce74\ud0c8\ub85c\uadf8 \uac19\uc740 \uac83\uc744 \ub9cc\ub4e4 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\uc8e0.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic import ListView\nfrom .models import Book\n\nclass BookListView(ListView):\n    model = Book\n    template_name = 'book_list.html'\n    context_object_name = 'books'\n    paginate_by = 10\n\n    def get_queryset(self):\n        return Book.objects.filter(is_published=True).order_by('-publication_date')<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic\uc5d0\uc11c ListView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uc0ac\uc6a9\ud560 \ubaa8\ub378(Book)\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BookListView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 ListView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model \uc18d\uc131\uc744 \uc124\uc815\ud558\uc5ec \uc0ac\uc6a9\ud560 \ubaa8\ub378\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>template_name\uc73c\ub85c \uc0ac\uc6a9\ud560 \ud15c\ud50c\ub9bf\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>context_object_name\uc73c\ub85c \ud15c\ud50c\ub9bf\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uac1d\uccb4 \ub9ac\uc2a4\ud2b8\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>paginate_by\ub85c \ud398\uc774\uc9c0\ub2f9 \ud45c\uc2dc\ud560 \uac1d\uccb4 \uc218\ub97c \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>get_queryset \uba54\uc11c\ub4dc\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud558\uc5ec \ucee4\uc2a4\ud140 \ucffc\ub9ac\uc14b\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ucd9c\ud310\ub41c \ucc45\ub4e4\uc758 \ubaa9\ub85d\uc744 \ucd5c\uc2e0\uc21c\uc73c\ub85c \uc815\ub82c\ud558\uc5ec \ud398\uc774\uc9c0\ub124\uc774\uc158\uacfc \ud568\uaed8 \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc815\ub9d0 \ud3b8\ub9ac\ud558\uc8e0?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. DetailView: \uc0c1\uc138 \uc815\ubcf4\uc758 \ub2ec\uc778<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">DetailView\ub294 \ub2e8\uc77c \uac1d\uccb4\uc758 \uc0c1\uc138 \uc815\ubcf4\ub97c \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \ud2b9\uc815 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub098 \uc81c\ud488\uc758 \uc0c1\uc138 \ud398\uc774\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uc544\uc8fc \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic import DetailView\nfrom .models import Book\n\nclass BookDetailView(DetailView):\n    model = Book\n    template_name = 'book_detail.html'\n    context_object_name = 'book'\n\n    def get_context_data(self, **kwargs):\n        context = super().get_context_data(**kwargs)\n        context&#91;'related_books'] = Book.objects.filter(author=self.object.author).exclude(pk=self.object.pk)&#91;:3]\n        return context<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic\uc5d0\uc11c DetailView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uc0ac\uc6a9\ud560 \ubaa8\ub378(Book)\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BookDetailView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 DetailView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, template_name, context_object_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>get_context_data \uba54\uc11c\ub4dc\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud558\uc5ec \ucd94\uac00 \ucee8\ud14d\uc2a4\ud2b8 \ub370\uc774\ud130\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uac19\uc740 \uc800\uc790\uc758 \ub2e4\ub978 \ucc45\ub4e4\uc744 \uad00\ub828 \ucc45\uc73c\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4 (\ucd5c\ub300 3\uac1c).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ucc45\uc758 \uc0c1\uc138 \uc815\ubcf4\uc640 \ud568\uaed8 \uad00\ub828\ub41c \ub2e4\ub978 \ucc45\ub4e4\ub3c4 \ud568\uaed8 \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\uc790 \uacbd\ud5d8\uc744 \ud55c\uce35 \ub354 \uac1c\uc120\ud560 \uc218 \uc788\uc8e0!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. FormView: \ud3fc \ucc98\ub9ac\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">FormView\ub294 \ud3fc \ucc98\ub9ac\ub97c \uc704\ud55c \uc81c\ub124\ub9ad \ubdf0\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \uc785\ub825\ubc1b\uace0 \ucc98\ub9ac\ud574\uc57c \ud560 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\ub2f5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic import FormView\nfrom django.urls import reverse_lazy\nfrom .forms import ContactForm\n\nclass ContactFormView(FormView):\n    template_name = 'contact.html'\n    form_class = ContactForm\n    success_url = reverse_lazy('contact_success')\n\n    def form_valid(self, form):\n        form.send_email()\n        return super().form_valid(form)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic\uc5d0\uc11c FormView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>reverse_lazy \ud568\uc218\ub97c \uc784\ud3ec\ud2b8\ud558\uc5ec URL \uc5ed\ucc38\uc870\ub97c \uc9c0\uc5f0 \ud3c9\uac00\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uc0ac\uc6a9\ud560 \ud3fc \ud074\ub798\uc2a4(ContactForm)\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>ContactFormView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 FormView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>template_name, form_class, success_url \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>form_valid \uba54\uc11c\ub4dc\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud558\uc5ec \ud3fc\uc774 \uc720\ud6a8\ud560 \ub54c\uc758 \ub3d9\uc791\uc744 \uc815\uc758\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\ud3fc\uc758 send_email \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uc5ec \uc774\uba54\uc77c\uc744 \ubcf4\ub0c5\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \uc5f0\ub77d\ucc98 \ud3fc\uc744 \uc27d\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud3fc\uc774 \uc720\ud6a8\ud558\uba74 \uc774\uba54\uc77c\uc744 \ubcf4\ub0b4\uace0 \uc131\uacf5 \ud398\uc774\uc9c0\ub85c \ub9ac\ub2e4\uc774\ub809\ud2b8\ud558\uc8e0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. CreateView: \uac1d\uccb4 \uc0dd\uc131\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CreateView\ub294 \uc0c8\ub85c\uc6b4 \uac1d\uccb4\ub97c \uc0dd\uc131\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uc81c\ub124\ub9ad \ubdf0\uc785\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc0c8\ub85c\uc6b4 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uac70\ub098 \uc0c8 \uc81c\ud488\uc744 \ucd94\uac00\ud560 \ub54c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc8e0.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic import CreateView\nfrom django.urls import reverse_lazy\nfrom .models import Book\n\nclass BookCreateView(CreateView):\n    model = Book\n    fields = &#91;'title', 'author', 'description', 'publication_date']\n    template_name = 'book_form.html'\n    success_url = reverse_lazy('book-list')\n\n    def form_valid(self, form):\n        form.instance.created_by = self.request.user\n        return super().form_valid(form)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic\uc5d0\uc11c CreateView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>reverse_lazy \ud568\uc218\uc640 Book \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BookCreateView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 CreateView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, fields, template_name, success_url \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>form_valid \uba54\uc11c\ub4dc\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud558\uc5ec \ud3fc\uc774 \uc720\ud6a8\ud560 \ub54c\uc758 \ub3d9\uc791\uc744 \uc815\uc758\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\ud604\uc7ac \ub85c\uadf8\uc778\ud55c \uc0ac\uc6a9\uc790\ub97c \ucc45\uc758 \uc0dd\uc131\uc790\ub85c \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \uc0c8\ub85c\uc6b4 \ucc45\uc744 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud3fc\uc774 \uc81c\ucd9c\ub418\uba74 \uc790\ub3d9\uc73c\ub85c \ud604\uc7ac \ub85c\uadf8\uc778\ud55c \uc0ac\uc6a9\uc790\ub97c \ucc45\uc758 \uc0dd\uc131\uc790\ub85c \uc124\uc815\ud558\uace0, \ucc45 \ubaa9\ub85d \ud398\uc774\uc9c0\ub85c \ub9ac\ub2e4\uc774\ub809\ud2b8\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. UpdateView: \uac1d\uccb4 \uc218\uc815\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">UpdateView\ub294 \uae30\uc874 \uac1d\uccb4\ub97c \uc218\uc815\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uc81c\ub124\ub9ad \ubdf0\uc785\ub2c8\ub2e4. \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \uc218\uc815\ud558\uac70\ub098 \uc81c\ud488 \uc815\ubcf4\ub97c \uc5c5\ub370\uc774\ud2b8\ud560 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\uc8e0.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic import UpdateView\nfrom django.urls import reverse_lazy\nfrom .models import Book\n\nclass BookUpdateView(UpdateView):\n    model = Book\n    fields = &#91;'title', 'author', 'description', 'publication_date']\n    template_name = 'book_update.html'\n\n    def get_success_url(self):\n        return reverse_lazy('book-detail', kwargs={'pk': self.object.pk})\n\n    def form_valid(self, form):\n        form.instance.updated_by = self.request.user\n        return super().form_valid(form)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic\uc5d0\uc11c UpdateView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>reverse_lazy \ud568\uc218\uc640 Book \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BookUpdateView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 UpdateView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, fields, template_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>get_success_url \uba54\uc11c\ub4dc\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud558\uc5ec \ub3d9\uc801\uc73c\ub85c \uc131\uacf5 URL\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>form_valid \uba54\uc11c\ub4dc\uc5d0\uc11c \ud604\uc7ac \uc0ac\uc6a9\uc790\ub97c \uc5c5\ub370\uc774\ud2b8\ud55c \uc0ac\uc6a9\uc790\ub85c \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \uae30\uc874 \ucc45 \uc815\ubcf4\ub97c \uc27d\uac8c \uc218\uc815\ud560 \uc218 \uc788\uc5b4\uc694. \uc218\uc815\uc774 \uc644\ub8cc\ub418\uba74 \ud574\ub2f9 \ucc45\uc758 \uc0c1\uc138 \ud398\uc774\uc9c0\ub85c \ub9ac\ub2e4\uc774\ub809\ud2b8\ub429\ub2c8\ub2e4. \ud3b8\ub9ac\ud558\uc8e0?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. DeleteView: \uac1d\uccb4 \uc0ad\uc81c\uc758 \ub2ec\uc778<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">DeleteView\ub294 \uac1d\uccb4\ub97c \uc0ad\uc81c\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uc81c\ub124\ub9ad \ubdf0\uc785\ub2c8\ub2e4. \ubd88\ud544\uc694\ud55c \ub370\uc774\ud130\ub97c \uc81c\uac70\ud560 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\ub2f5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic import DeleteView\nfrom django.urls import reverse_lazy\nfrom django.contrib.auth.mixins import UserPassesTestMixin\nfrom .models import Book\n\nclass BookDeleteView(UserPassesTestMixin, DeleteView):\n    model = Book\n    template_name = 'book_confirm_delete.html'\n    success_url = reverse_lazy('book-list')\n\n    def test_func(self):\n        return self.request.user.is_staff or self.get_object().created_by == self.request.user<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic\uc5d0\uc11c DeleteView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>UserPassesTestMixin\uc744 \uc784\ud3ec\ud2b8\ud558\uc5ec \uad8c\ud55c \uccb4\ud06c\ub97c \uc218\ud589\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BookDeleteView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 UserPassesTestMixin, DeleteView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, template_name, success_url \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>test_func \uba54\uc11c\ub4dc\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud558\uc5ec \uc0ad\uc81c \uad8c\ud55c\uc744 \uccb4\ud06c\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ucc45\uc744 \uc548\uc804\ud558\uac8c \uc0ad\uc81c\ud560 \uc218 \uc788\uc5b4\uc694. \uc2a4\ud0dc\ud504 \uc0ac\uc6a9\uc790\ub098 \ucc45\uc744 \uc0dd\uc131\ud55c \uc0ac\uc6a9\uc790\ub9cc \uc0ad\uc81c\ud560 \uc218 \uc788\ub3c4\ub85d \uad8c\ud55c\uc744 \uc81c\ud55c\ud588\uc2b5\ub2c8\ub2e4. \ubcf4\uc548\ub3c4 \ucc59\uae30\uace0 \uae30\ub2a5\ub3c4 \ucc59\uae30\uace0, \uc77c\uc11d\uc774\uc870\ub124\uc694!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">10. ArchiveIndexView: \ub0a0\uc9dc\ubcc4 \uc544\uce74\uc774\ube0c\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ArchiveIndexView\ub294 \ub0a0\uc9dc\ubcc4\ub85c \uc815\ub82c\ub41c \uac1d\uccb4\uc758 \ucd5c\uc2e0 \ubaa9\ub85d\uc744 \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ube14\ub85c\uadf8 \uc544\uce74\uc774\ube0c \ud398\uc774\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\uc8e0.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic.dates import ArchiveIndexView\nfrom .models import BlogPost\n\nclass BlogArchiveIndexView(ArchiveIndexView):\n    model = BlogPost\n    date_field = \"published_date\"\n    template_name = \"blog_archive.html\"\n    context_object_name = \"latest_posts\"\n    allow_future = False\n    paginate_by = 10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic.dates\uc5d0\uc11c ArchiveIndexView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogPost \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogArchiveIndexView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 ArchiveIndexView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, date_field, template_name, context_object_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>allow_future\ub97c False\ub85c \uc124\uc815\ud558\uc5ec \ubbf8\ub798 \ub0a0\uc9dc\uc758 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>paginate_by\ub85c \ud398\uc774\uc9c0\ub2f9 \ud45c\uc2dc\ud560 \ud3ec\uc2a4\ud2b8 \uc218\ub97c \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \ub0a0\uc9dc\ubcc4\ub85c \uc815\ub82c\ud558\uc5ec \ucd5c\uc2e0 \uc21c\uc73c\ub85c \ud45c\uc2dc\ud560 \uc218 \uc788\uc5b4\uc694. \ud398\uc774\uc9c0\ub124\uc774\uc158\uae4c\uc9c0 \uc790\ub3d9\uc73c\ub85c \ucc98\ub9ac\ud574\uc8fc\ub2c8 \uc815\ub9d0 \ud3b8\ub9ac\ud558\uc8e0?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11. YearArchiveView: \uc5f0\ub3c4\ubcc4 \uc544\uce74\uc774\ube0c\uc758 \ub2ec\uc778<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">YearArchiveView\ub294 \ud2b9\uc815 \ub144\ub3c4\uc758 \uac1d\uccb4 \ubaa9\ub85d\uc744 \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc5f0\uac04 \ubcf4\uace0\uc11c\ub098 \uc5f0\ub3c4\ubcc4 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud560 \ub54c \uc720\uc6a9\ud574\uc694.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic.dates import YearArchiveView\nfrom .models import BlogPost\n\nclass BlogYearArchiveView(YearArchiveView):\n    model = BlogPost\n    date_field = \"published_date\"\n    make_object_list = True\n    template_name = \"blog_year_archive.html\"\n    year_format = '%Y'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic.dates\uc5d0\uc11c YearArchiveView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogPost \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogYearArchiveView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 YearArchiveView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, date_field, template_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>make_object_list\ub97c True\ub85c \uc124\uc815\ud558\uc5ec \ud574\ub2f9 \ub144\ub3c4\uc758 \ubaa8\ub4e0 \uac1d\uccb4 \ubaa9\ub85d\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>year_format\uc73c\ub85c \ub144\ub3c4 \ud615\uc2dd\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ud2b9\uc815 \ub144\ub3c4\uc758 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \uc27d\uac8c \ud45c\uc2dc\ud560 \uc218 \uc788\uc5b4\uc694. URL\uc5d0\uc11c \ub144\ub3c4\ub97c \ubc1b\uc544 \ud574\ub2f9 \ub144\ub3c4\uc758 \ud3ec\uc2a4\ud2b8\ub9cc \ubcf4\uc5ec\uc8fc\ub2c8 \uc544\uce74\uc774\ube0c \uae30\ub2a5\uc744 \uad6c\ud604\ud558\uae30 \uc544\uc8fc \uc88b\uc8e0!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12. MonthArchiveView: \uc6d4\ubcc4 \uc544\uce74\uc774\ube0c\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">MonthArchiveView\ub294 \ud2b9\uc815 \uc6d4\uc758 \uac1d\uccb4 \ubaa9\ub85d\uc744 \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc6d4\uac04 \ubcf4\uace0\uc11c\ub098 \uc6d4\ubcc4 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uae30\uc5d0 \ub531\uc774\uc5d0\uc694.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic.dates import MonthArchiveView\nfrom .models import BlogPost\n\nclass BlogMonthArchiveView(MonthArchiveView):\n    model = BlogPost\n    date_field = \"published_date\"\n    template_name = \"blog_month_archive.html\"\n    month_format = '%m'\n    allow_future = False<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic.dates\uc5d0\uc11c MonthArchiveView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogPost \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogMonthArchiveView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 MonthArchiveView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, date_field, template_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>month_format\uc73c\ub85c \uc6d4 \ud615\uc2dd\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>allow_future\ub97c False\ub85c \uc124\uc815\ud558\uc5ec \ubbf8\ub798 \uc6d4\uc758 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ud2b9\uc815 \uc6d4\uc758 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \uac04\ud3b8\ud558\uac8c \ud45c\uc2dc\ud560 \uc218 \uc788\uc5b4\uc694. URL\uc5d0\uc11c \ub144\ub3c4\uc640 \uc6d4\uc744 \ubc1b\uc544 \ud574\ub2f9 \uc6d4\uc758 \ud3ec\uc2a4\ud2b8\ub9cc \ubcf4\uc5ec\uc8fc\ub2c8 \uc6d4\ubcc4 \uc544\uce74\uc774\ube0c \uae30\ub2a5\uc744 \uad6c\ud604\ud558\uae30 \uc544\uc8fc \uc88b\uc2b5\ub2c8\ub2e4!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc790, \uc5ec\uae30\uae4c\uc9c0 12\uac1c\uc758 \uc81c\ub124\ub9ad \ubdf0\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \ub098\uba38\uc9c0 4\uac1c\uc758 \ubdf0\ub3c4 \uacc4\uc18d\ud574\uc11c \uc0b4\ud3b4\ubcfc\uae4c\uc694?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">13. WeekArchiveView: \uc8fc\uac04 \uc544\uce74\uc774\ube0c\uc758 \ub2ec\uc778<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WeekArchiveView\ub294 \ud2b9\uc815 \uc8fc\uc758 \uac1d\uccb4 \ubaa9\ub85d\uc744 \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc8fc\uac04 \ubcf4\uace0\uc11c\ub098 \uc8fc\ubcc4 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uae30\uc5d0 \uc544\uc8fc \uc720\uc6a9\ud574\uc694.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic.dates import WeekArchiveView\nfrom .models import BlogPost\n\nclass BlogWeekArchiveView(WeekArchiveView):\n    model = BlogPost\n    date_field = \"published_date\"\n    template_name = \"blog_week_archive.html\"\n    week_format = \"%W\"\n    allow_future = False<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic.dates\uc5d0\uc11c WeekArchiveView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogPost \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogWeekArchiveView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 WeekArchiveView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, date_field, template_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>week_format\uc73c\ub85c \uc8fc \ud615\uc2dd\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4 (%W\ub294 \uc5f0\uc911 \uba87 \ubc88\uc9f8 \uc8fc\uc778\uc9c0\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4).<\/li>\n\n\n\n<li>allow_future\ub97c False\ub85c \uc124\uc815\ud558\uc5ec \ubbf8\ub798 \uc8fc\uc758 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ud2b9\uc815 \uc8fc\uc758 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \uc27d\uac8c \ud45c\uc2dc\ud560 \uc218 \uc788\uc5b4\uc694. \uc8fc\uac04 \ub9ac\ubdf0\ub098 \uc8fc\uac04 \uc694\uc57d \uae30\ub2a5\uc744 \uad6c\ud604\ud560 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\ub2f5\ub2c8\ub2e4!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">14. DayArchiveView: \uc77c\ubcc4 \uc544\uce74\uc774\ube0c\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">DayArchiveView\ub294 \ud2b9\uc815 \ub0a0\uc9dc\uc758 \uac1d\uccb4 \ubaa9\ub85d\uc744 \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc77c\uc77c \ubcf4\uace0\uc11c\ub098 \ud2b9\uc815 \ub0a0\uc9dc\uc758 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uae30\uc5d0 \ub531\uc774\uc5d0\uc694.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic.dates import DayArchiveView\nfrom .models import BlogPost\n\nclass BlogDayArchiveView(DayArchiveView):\n    model = BlogPost\n    date_field = \"published_date\"\n    template_name = \"blog_day_archive.html\"\n    month_format = '%m'\n    allow_future = False\n    context_object_name = 'posts'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic.dates\uc5d0\uc11c DayArchiveView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogPost \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogDayArchiveView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 DayArchiveView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, date_field, template_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>month_format\uc73c\ub85c \uc6d4 \ud615\uc2dd\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>allow_future\ub97c False\ub85c \uc124\uc815\ud558\uc5ec \ubbf8\ub798 \ub0a0\uc9dc\uc758 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>context_object_name\uc73c\ub85c \ud15c\ud50c\ub9bf\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uac1d\uccb4 \ub9ac\uc2a4\ud2b8\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ud2b9\uc815 \ub0a0\uc9dc\uc758 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \uac04\ud3b8\ud558\uac8c \ud45c\uc2dc\ud560 \uc218 \uc788\uc5b4\uc694. \uc77c\uc77c \ub2e4\uc774\uc5b4\ub9ac\ub098 \ud2b9\uc815 \ub0a0\uc9dc\uc758 \uc774\ubca4\ud2b8\ub97c \ubcf4\uc5ec\uc904 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\ub2f5\ub2c8\ub2e4!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">15. TodayArchiveView: \uc624\ub298\uc758 \uc544\uce74\uc774\ube0c \ub2ec\uc778<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">TodayArchiveView\ub294 \uc624\ub298 \ub0a0\uc9dc\uc758 \uac1d\uccb4 \ubaa9\ub85d\uc744 \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc624\ub298\uc758 \ub274\uc2a4\ub098 \uc624\ub298 \ubc1c\ud589\ub41c \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uae30\uc5d0 \uc544\uc8fc \uc88b\uc544\uc694.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic.dates import TodayArchiveView\nfrom .models import BlogPost\n\nclass BlogTodayArchiveView(TodayArchiveView):\n    model = BlogPost\n    date_field = \"published_date\"\n    template_name = \"blog_today_archive.html\"\n    context_object_name = 'todays_posts'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic.dates\uc5d0\uc11c TodayArchiveView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogPost \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogTodayArchiveView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 TodayArchiveView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, date_field, template_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>context_object_name\uc73c\ub85c \ud15c\ud50c\ub9bf\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uac1d\uccb4 \ub9ac\uc2a4\ud2b8\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \uc624\ub298 \ubc1c\ud589\ub41c \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \uc27d\uac8c \ud45c\uc2dc\ud560 \uc218 \uc788\uc5b4\uc694. &#8220;\uc624\ub298\uc758 \ud2b9\uc9d1&#8221; \uac19\uc740 \uae30\ub2a5\uc744 \uad6c\ud604\ud560 \ub54c \uc544\uc8fc \uc720\uc6a9\ud558\ub2f5\ub2c8\ub2e4!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">16. DateDetailView: \ub0a0\uc9dc\ubcc4 \uc0c1\uc138 \uc815\ubcf4\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">DateDetailView\ub294 \ud2b9\uc815 \ub0a0\uc9dc\uc758 \ud2b9\uc815 \uac1d\uccb4 \uc0c1\uc138 \uc815\ubcf4\ub97c \ud45c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub0a0\uc9dc\ubcc4\ub85c \uace0\uc720\ud55c URL\uc744 \uac00\uc9c4 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud560 \ub54c \uc544\uc8fc \uc720\uc6a9\ud574\uc694.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.views.generic.dates import DateDetailView\nfrom .models import BlogPost\n\nclass BlogDateDetailView(DateDetailView):\n    model = BlogPost\n    date_field = \"published_date\"\n    month_format = '%m'\n    template_name = \"blog_detail.html\"\n    context_object_name = 'post'\n    allow_future = False<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc \ud574\uc124:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>django.views.generic.dates\uc5d0\uc11c DateDetailView\ub97c \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogPost \ubaa8\ub378\uc744 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>BlogDateDetailView \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 DateDetailView\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>model, date_field, template_name \uc18d\uc131\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>month_format\uc73c\ub85c \uc6d4 \ud615\uc2dd\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>context_object_name\uc73c\ub85c \ud15c\ud50c\ub9bf\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uac1d\uccb4\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>allow_future\ub97c False\ub85c \uc124\uc815\ud558\uc5ec \ubbf8\ub798 \ub0a0\uc9dc\uc758 \ud3ec\uc2a4\ud2b8\ub97c \ud45c\uc2dc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uba74 \ud2b9\uc815 \ub0a0\uc9dc\uc5d0 \ubc1c\ud589\ub41c \ud2b9\uc815 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\uc758 \uc0c1\uc138 \uc815\ubcf4\ub97c \ud45c\uc2dc\ud560 \uc218 \uc788\uc5b4\uc694. URL\uc5d0 \ub0a0\uc9dc \uc815\ubcf4\ub97c \ud3ec\ud568\uc2dc\ucf1c SEO\uc5d0\ub3c4 \uc88b\uace0, \uc0ac\uc6a9\uc790\uc5d0\uac8c \uc815\ubcf4\ub97c \uba85\ud655\ud788 \uc804\ub2ec\ud560 \uc218 \uc788\ub2f5\ub2c8\ub2e4!<\/p>\n\n\n<style>.wp-block-kadence-advancedheading.kt-adv-heading4982_130704-b1, .wp-block-kadence-advancedheading.kt-adv-heading4982_130704-b1[data-kb-block=\"kb-adv-heading4982_130704-b1\"]{font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading4982_130704-b1 mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading4982_130704-b1[data-kb-block=\"kb-adv-heading4982_130704-b1\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading4982_130704-b1 img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading4982_130704-b1[data-kb-block=\"kb-adv-heading4982_130704-b1\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<h2 class=\"kt-adv-heading4982_130704-b1 wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading4982_130704-b1\">\ub9c8\ubb34\ub9ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc790, \uc774\ub807\uac8c \ud574\uc11c Django\uc758 16\uac00\uc9c0 \uc81c\ub124\ub9ad \ubdf0\uc5d0 \ub300\ud574 \ubaa8\ub450 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774 \uc81c\ub124\ub9ad \ubdf0\ub4e4\uc744 \uc798 \ud65c\uc6a9\ud558\uba74 \uc6f9 \uac1c\ubc1c \uc2dc\uac04\uc744 \ud06c\uac8c \ub2e8\ucd95\ud560 \uc218 \uc788\uace0, \ucf54\ub4dc\uc758 \uc7ac\uc0ac\uc6a9\uc131\ub3c4 \ub192\uc77c \uc218 \uc788\uc5b4\uc694.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \uc81c\ub124\ub9ad \ubdf0\ub97c \uc0ac\uc6a9\ud560 \ub54c \uc8fc\uc758\ud560 \uc810\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ub54c\ub85c\ub294 \ub108\ubb34 \ub9ce\uc740 \ucee4\uc2a4\ud130\ub9c8\uc774\uc9d5\uc774 \ud544\uc694\ud55c \uacbd\uc6b0, \uc624\ud788\ub824 \uc77c\ubc18 \ud568\uc218 \uae30\ubc18 \ubdf0\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \ub354 \uac04\ub2e8\ud560 \uc218 \uc788\uc5b4\uc694. \ub610\ud55c, \uc81c\ub124\ub9ad \ubdf0\uc758 \ub3d9\uc791 \ubc29\uc2dd\uc744 \uc815\ud655\ud788 \uc774\ud574\ud558\uc9c0 \ubabb\ud558\uba74 \uc608\uc0c1\uce58 \ubabb\ud55c \uacb0\uacfc\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\ub3c4 \ub300\ubd80\ubd84\uc758 \uacbd\uc6b0, \uc81c\ub124\ub9ad \ubdf0\ub294 Django \uac1c\ubc1c\uc744 \ud6e8\uc52c \ub354 \ud6a8\uc728\uc801\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4. \ud2b9\ud788 CRUD(Create, Read, Update, Delete) \uc791\uc5c5\uc744 \uad6c\ud604\ud560 \ub54c \uc81c\ub124\ub9ad \ubdf0\uc758 \uc9c4\uac00\uac00 \ubc1c\ud718\ub418\uc8e0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec\ubd84\ub3c4 \uc774\uc81c Django\uc758 \uc81c\ub124\ub9ad \ubdf0 16\uac00\uc9c0\ub97c \ubaa8\ub450 \uc54c\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uc9c0\uc2dd\uc744 \ubc14\ud0d5\uc73c\ub85c \ub354\uc6b1 \ud6a8\uc728\uc801\uc774\uace0 \uac15\ub825\ud55c Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4e4\uc5b4\ubcf4\uc138\uc694.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">#\uc6a9\uc5b4 \ud574\uc124<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\uc81c\ub124\ub9ad \ubdf0(Generic View): \uc790\uc8fc \uc0ac\uc6a9\ub418\ub294 \ubdf0 \ud328\ud134\uc744 \ucd94\uc0c1\ud654\ud558\uc5ec \uc81c\uacf5\ud558\ub294 Django\uc758 \uae30\ub2a5<\/li>\n\n\n\n<li>CRUD: Create(\uc0dd\uc131), Read(\uc77d\uae30), Update(\uac31\uc2e0), Delete(\uc0ad\uc81c)\uc758 \uc57d\uc790\ub85c, \ub370\uc774\ud130 \ucc98\ub9ac\uc758 \uae30\ubcf8\uc801\uc778 4\uac00\uc9c0 \uae30\ub2a5<\/li>\n\n\n\n<li>\ucee8\ud14d\uc2a4\ud2b8(Context): \ud15c\ud50c\ub9bf\uc5d0 \uc804\ub2ec\ub418\ub294 \ubcc0\uc218\ub4e4\uc758 \uc9d1\ud569<\/li>\n\n\n\n<li>\ucffc\ub9ac\uc14b(Queryset): \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c\ubd80\ud130 \uc804\ub2ec\ubc1b\uc740 \uac1d\uccb4\ub4e4\uc758 \ubaa9\ub85d<\/li>\n\n\n\n<li>\ud398\uc774\uc9c0\ub124\uc774\uc158(Pagination): \ub9ce\uc740 \uc218\uc758 \uac1d\uccb4\ub97c \uc5ec\ub7ec \ud398\uc774\uc9c0\ub85c \ub098\ub204\uc5b4 \ud45c\uc2dc\ud558\ub294 \uae30\ub2a5<\/li>\n\n\n\n<li>URL \uc5ed\ucc38\uc870: URL \ud328\ud134\uc758 \uc774\ub984\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud574\ub2f9 URL\uc744 \uc0dd\uc131\ud558\ub294 \uae30\ub2a5<\/li>\n\n\n\n<li>\ubbf8\ub4e4\uc6e8\uc5b4(Middleware): \uc694\uccad\uacfc \uc751\ub2f5 \ucc98\ub9ac \uc911\uac04\uc5d0\uc11c \uc791\ub3d9\ud558\ub294 \uc2dc\uc2a4\ud15c<\/li>\n\n\n\n<li>ORM(Object-Relational Mapping): \uac1d\uccb4\uc640 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\uacb0\ud574\uc8fc\ub294 \uae30\uc220<\/li>\n\n\n\n<li>\ud15c\ud50c\ub9bf(Template): HTML \ud30c\uc77c\uc5d0 Python \ubcc0\uc218\uc640 \ud0dc\uadf8\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574\uc8fc\ub294 Django\uc758 \uae30\ub2a5<\/li>\n\n\n\n<li>CBV(Class-Based View): \ud074\ub798\uc2a4\ub97c \uae30\ubc18\uc73c\ub85c \uc791\uc131\ub41c \ubdf0<\/li>\n<\/ol>\n\n\n<style>.kb-image4457_249bea-0c.kb-image-is-ratio-size, .kb-image4457_249bea-0c .kb-image-is-ratio-size{max-width:300px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image4457_249bea-0c.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image4457_249bea-0c .kb-image-is-ratio-size{align-self:unset;}.kb-image4457_249bea-0c figure{max-width:300px;}.kb-image4457_249bea-0c .image-is-svg, .kb-image4457_249bea-0c .image-is-svg img{width:100%;}.kb-image4457_249bea-0c .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<div class=\"wp-block-kadence-image kb-image4457_249bea-0c\"><figure class=\"aligncenter size-medium\"><img decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/teri-coding-300x300.webp\" alt=\"\ud14c\ub9ac \uc774\ubaa8\ud2f0\ucf58\" class=\"kb-img wp-image-4456\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/teri-coding-300x300.webp 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/teri-coding-600x600.webp 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/teri-coding-150x150.webp 150w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/teri-coding-768x768.webp 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/teri-coding-12x12.webp 12w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/teri-coding.webp 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><figcaption><strong>( \uc990\uac81\uac8c \ucf54\ub529\uc744 \ud569\uc2dc\ub2e4! )<\/strong><\/figcaption><\/figure><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub155\ud558\uc138\uc694, \uc5f4\uc815 \uac00\ub4dd\ud55c Django \uac1c\ubc1c\uc790 \uc5ec\ub7ec\ubd84! \uc624\ub298\uc740 \uc815\ub9d0 \ud765\ubbf8\uc9c4\uc9c4\ud55c \uc8fc\uc81c\ub97c&#8230;<\/p>","protected":false},"author":3,"featured_media":5027,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[3],"tags":[812,34,722,877,878],"class_list":["post-4982","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python-coding","tag-django","tag-python","tag-722","tag-877","tag-878"],"taxonomy_info":{"category":[{"value":3,"label":"\ud30c\uc774\uc36c(Python)"}],"post_tag":[{"value":812,"label":"Django"},{"value":34,"label":"python"},{"value":722,"label":"\uc6f9 \uac1c\ubc1c"},{"value":877,"label":"\uc81c\ub124\ub9ad \ubdf0"},{"value":878,"label":"\ud074\ub798\uc2a4 \uae30\ubc18 \ubdf0"}]},"featured_image_src_large":["https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/02\/\uc81c\ub124\ub9ad-\ubdf0-16\uac00\uc9c0-\ud3ec\uc2a4\ud2b8-\uc378\ub124\uc77c-600x600.jpg",600,600,true],"author_info":{"display_name":"TERE","author_link":"https:\/\/secondlife.lol\/ja\/author\/tere\/"},"comment_info":0,"category_info":[{"term_id":3,"name":"\ud30c\uc774\uc36c(Python)","slug":"python-coding","term_group":0,"term_taxonomy_id":3,"taxonomy":"category","description":"","parent":20,"count":119,"filter":"raw","cat_ID":3,"category_count":119,"category_description":"","cat_name":"\ud30c\uc774\uc36c(Python)","category_nicename":"python-coding","category_parent":20}],"tag_info":[{"term_id":812,"name":"Django","slug":"django","term_group":0,"term_taxonomy_id":812,"taxonomy":"post_tag","description":"","parent":0,"count":10,"filter":"raw"},{"term_id":34,"name":"python","slug":"python","term_group":0,"term_taxonomy_id":34,"taxonomy":"post_tag","description":"","parent":0,"count":22,"filter":"raw"},{"term_id":722,"name":"\uc6f9 \uac1c\ubc1c","slug":"%ec%9b%b9-%ea%b0%9c%eb%b0%9c","term_group":0,"term_taxonomy_id":722,"taxonomy":"post_tag","description":"","parent":0,"count":8,"filter":"raw"},{"term_id":877,"name":"\uc81c\ub124\ub9ad \ubdf0","slug":"%ec%a0%9c%eb%84%a4%eb%a6%ad-%eb%b7%b0","term_group":0,"term_taxonomy_id":877,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":878,"name":"\ud074\ub798\uc2a4 \uae30\ubc18 \ubdf0","slug":"%ed%81%b4%eb%9e%98%ec%8a%a4-%ea%b8%b0%eb%b0%98-%eb%b7%b0","term_group":0,"term_taxonomy_id":878,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/4982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/comments?post=4982"}],"version-history":[{"count":10,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/4982\/revisions"}],"predecessor-version":[{"id":5030,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/4982\/revisions\/5030"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/media\/5027"}],"wp:attachment":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/media?parent=4982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/categories?post=4982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/tags?post=4982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}