{"id":4661,"date":"2025-01-25T17:00:53","date_gmt":"2025-01-25T08:00:53","guid":{"rendered":"https:\/\/secondlife.lol\/?p=4661"},"modified":"2025-01-25T17:20:51","modified_gmt":"2025-01-25T08:20:51","slug":"mastering-django-mtv-pattern-complete-guide","status":"publish","type":"post","link":"https:\/\/secondlife.lol\/en\/mastering-django-mtv-pattern-complete-guide\/","title":{"rendered":"Mastering the Django MTV Pattern: A Complete Guide to Models, Views, Templates, and Forms"},"content":{"rendered":"\n<p>\uc6f9 \uac1c\ubc1c, \ud2b9\ud788 Django\ub85c \uc2dc\uc791\ud574 \ubcfc\uae4c \ud558\uace0 \uace0\ubbfc\ud558\uc2dc\ub294 \ubd84\ub4e4! MTV\ub77c\ub294 \uc6a9\uc5b4\ub97c \ub4e4\uc5b4\ubcf4\uc168\ub098\uc694? \ucc98\uc74c\uc5d4 \uc804 &#8216;Music Television&#8217;\uc778 \uc904 \uc54c\uc558\uc5b4\uc694.(\ubcd1\ub9db \uc544\uc7ac\uac1c\uadf8..) \ud558\uc9c0\ub9cc <a href=\"https:\/\/www.djangoproject.com\/\" target=\"_blank\" rel=\"noopener\">Django<\/a>\uc5d0\uc11c MTV\ub294 \uc804\ud600 \ub2e4\ub978 \uc758\ubbf8\ub97c \uac00\uc9c0\uace0 \uc788\uc8e0. <\/p>\n\n\n\n<p>\uc624\ub298\uc740 \uc774 <strong>Django MTV \ud328\ud134<\/strong>\uc5d0 \ub300\ud574 \uae4a\uc774 \ud30c\ud5e4\uccd0 \ubcfc \uac70\uc608\uc694. <strong>Models, Templates, Views<\/strong>\u2026 \uadf8\ub9ac\uace0 <strong>Forms<\/strong>\uae4c\uc9c0! \ucf54\ub4dc \uc608\uc81c\uc640 \ud568\uaed8 \ud558\ub098\ud558\ub098 \uc0b4\ud3b4\ubcf4\uba74\uc11c, Django\uc758 \ud575\uc2ec\uc744 \ud30c\uc545\ud574\ubd10\uc694. \uc774 \uae00\uc744 \ub2e4 \uc77d\uc73c\uc2dc\uba74, Django MTV\uc758 \uc804\ubb38\uac00\uac00 \ub418\uc2e4 \uac70\uc608\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\n<h2 class=\"wp-block-heading\">Django MTV \ud328\ud134\uc774\ub780?<\/h2>\n\n\n<style>.kb-image4661_85f8c4-bf .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-image4661_85f8c4-bf img.kb-img, .kb-image4661_85f8c4-bf .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-image4661_85f8c4-bf\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"734\" height=\"379\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-10.png\" alt=\"Django MTV \ud328\ud134 \uc774\ud574\ub3c4\" class=\"kb-img wp-image-4663\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-10.png 734w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-10-300x155.png 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-10-600x310.png 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-10-18x9.png 18w\" sizes=\"(max-width: 734px) 100vw, 734px\" \/><figcaption>( Django MTV \ud328\ud134 \uc774\ud574 )<\/figcaption><\/figure><\/div>\n\n\n\n<p>Django MTV \ud328\ud134\uc740 Model-Template-View\uc758 \uc57d\uc790\ub85c, \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uad6c\uc870\ub97c \uccb4\uacc4\uc801\uc73c\ub85c \ub098\ub204\ub294 \ubc29\uc2dd\uc774\uc5d0\uc694. \ub2e4\ub978 \ud504\ub808\uc784\uc6cc\ud06c\uc758 MVC(Model-View-Controller) \ud328\ud134\uacfc \ube44\uc2b7\ud558\uc9c0\ub9cc, Django\ub9cc\uc758 \ud2b9\ubcc4\ud55c \ub9db\uc774 \uc788\uc8e0.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Model: \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub2e4\ub8e8\ub294 \ubd80\ubd84<\/li>\n\n\n\n<li>Template: \uc0ac\uc6a9\uc790\uc5d0\uac8c \ubcf4\uc5ec\uc9c0\ub294 UI \ubd80\ubd84<\/li>\n\n\n\n<li>View: \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \ucc98\ub9ac\ud558\ub294 \ubd80\ubd84<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>MTV<\/strong>(Model-Template-View)\uc640 <strong>MVC<\/strong>(Model-View-Controller) \ud328\ud134\uc758 \uc8fc\uc694 <strong>\ucc28\uc774\uc810<\/strong><\/p>\n\n\n\n<p>Django\uc758 MTV \ud328\ud134<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Model: \ub370\uc774\ud130 \uad6c\uc870\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc0c1\ud638\uc791\uc6a9 \ub2f4\ub2f9<\/li>\n\n\n\n<li>Template: \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4 \ub80c\ub354\ub9c1 (View\uc640 \uc720\uc0ac)<\/li>\n\n\n\n<li>View: \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \ucc98\ub9ac (Controller\uc640 \uc720\uc0ac)<\/li>\n<\/ul>\n\n\n\n<p>\ud074\ub798\uc2dd MVC \ud328\ud134<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Model: \ub370\uc774\ud130\uc640 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1<\/li>\n\n\n\n<li>View: \uc0ac\uc6a9\uc790\uc5d0\uac8c \ubcf4\uc5ec\uc9c0\ub294 UI<\/li>\n\n\n\n<li>Controller: \uc0ac\uc6a9\uc790 \uc785\ub825 \ucc98\ub9ac, Model\uacfc View \uc911\uc7ac<\/li>\n<\/ul>\n\n\n\n<p>\uc8fc\uc694 \ucc28\uc774<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Django\uc758 View\uac00 MVC\uc758 Controller \uc5ed\ud560<\/li>\n\n\n\n<li>Django\uc758 Template\uc774 MVC\uc758 View \uc5ed\ud560<\/li>\n\n\n\n<li>\uae30\ubcf8 \uac1c\ub150\uc740 \uac70\uc758 \ub3d9\uc77c, \uc6a9\uc5b4\ub9cc \ub2e4\ub984<\/li>\n<\/ul>\n\n\n\n<p>\uc2e4\uc9c8\uc801\uc73c\ub85c \ub450 \ud328\ud134\uc740 \ub370\uc774\ud130, \ub85c\uc9c1, \ud45c\ud604\uc744 \ubd84\ub9ac\ud55c\ub2e4\ub294 \ub3d9\uc77c\ud55c \ubaa9\uc801\uc744 \uac00\uc9d1\ub2c8\ub2e4.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Django Models: \ub370\uc774\ud130\uc758 \uae30\ucd08<\/h2>\n\n\n<style>.kb-image4661_28ab5c-cf .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-image4661_28ab5c-cf img.kb-img, .kb-image4661_28ab5c-cf .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-image4661_28ab5c-cf\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"830\" height=\"458\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-11.png\" alt=\"Django Models \uad6c\uc870\ud654 \uc774\ubbf8\uc9c0\" class=\"kb-img wp-image-4664\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-11.png 830w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-11-300x166.png 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-11-600x331.png 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-11-768x424.png 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-11-18x10.png 18w\" sizes=\"(max-width: 830px) 100vw, 830px\" \/><figcaption>( Django Models \uc608\uc2dc \uad6c\uc870 )<\/figcaption><\/figure><\/div>\n\n\n\n<p>Django Models\uc740 <strong>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud14c\uc774\ube14<\/strong>\uc744 Python \ud074\ub798\uc2a4\ub85c \ud45c\ud604\ud574\uc694. \uc608\ub97c \ub4e4\uc5b4, \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \ub9cc\ub4e0\ub2e4\uace0 \uc0dd\uac01\ud574\ubcfc\uae4c\uc694?<br><code>* <strong>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud14c\uc774\ube14<\/strong>\uc740 \uc815\ubcf4\ub97c \ud589(row)\uacfc \uc5f4(column)\ub85c \uad6c\uc870\ud654\ud558\uc5ec \uc800\uc7a5\ud558\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uae30\ubcf8 \uad6c\uc870\uc785\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc544\ub798 \ucf54\ub4dc\uc758 BlogPost \ubaa8\ub378\uc740 'blog_post'\ub77c\ub294 \ud14c\uc774\ube14\ub85c \ubcc0\ud658\ub418\uba70, \uac01 \ud589\uc740 \uac1c\ubcc4 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8, \uac01 \uc5f4\uc740 \uc81c\ubaa9, \ub0b4\uc6a9, \ubc1c\ud589 \ub0a0\uc9dc\ub97c \uc800\uc7a5\ud569\ub2c8\ub2e4.<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from django.db import models\n\nclass BlogPost(models.Model):\n    title = models.CharField(max_length=200)\n    content = models.TextField()\n    pub_date = models.DateTimeField('date published')\n\n    def __str__(self):\n        return self.title<\/code><\/pre>\n\n\n\n<p><strong>\ucf54\ub4dc \ud574\uc124<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>from django.db import models<\/code>: Django\uc758 \ubaa8\ub378 \uae30\ub2a5\uc744 \uac00\uc838\uc635\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>class BlogPost(models.Model)<\/code>: <code>BlogPost<\/code>\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ubaa8\ub378 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>title = models.CharField(max_length=200)<\/code>: \ucd5c\ub300 200\uc790\uc758 \ubb38\uc790\uc5f4 \ud544\ub4dc\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>content = models.TextField()<\/code>: \uae34 \ud14d\uc2a4\ud2b8\ub97c \uc800\uc7a5\ud560 \uc218 \uc788\ub294 \ud544\ub4dc\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>pub_date = models.DateTimeField('date published')<\/code>: \ub0a0\uc9dc\uc640 \uc2dc\uac04\uc744 \uc800\uc7a5\ud558\ub294 \ud544\ub4dc\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>def __str__(self):<\/code>: \uc774 \ubaa8\ub378\uc758 \uac1d\uccb4\ub97c \ubb38\uc790\uc5f4\ub85c \ud45c\ud604\ud560 \ub54c \uc0ac\uc6a9\ud560 \ubc29\ubc95\uc744 \uc815\uc758\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p>\uc774\ub807\uac8c \ud558\uba74 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 &#8216;BlogPost&#8217; \ud14c\uc774\ube14\uc774 \uc0dd\uc131\ub418\uace0, <strong>Django ORM<\/strong>\uc744 \ud1b5\ud574 \uc27d\uac8c \ub370\uc774\ud130\ub97c \ub2e4\ub8f0 \uc218 \uc788\uc5b4\uc694.<br><code>* <strong>Django ORM(Object-Relational Mapping)<\/strong>\uc740 Python \uac1d\uccb4\uc640 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud14c\uc774\ube14 \uc0ac\uc774\uc758 \ubcc0\ud658\uc744 \uc790\ub3d9\uc73c\ub85c \ucc98\ub9ac\ud558\ub294 \uae30\uc220\uc785\ub2c8\ub2e4. \uc8fc\uc694 \ud2b9\uc9d5\uc73c\ub85c\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ucffc\ub9ac\ub97c Python \uba54\uc11c\ub4dc\ub85c \ubcc0\ud658, SQL \ucffc\ub9ac \uc9c1\uc811 \uc791\uc131 \uc5c6\uc774 \ub370\uc774\ud130 \uc870\uc791 \uac00\ub2a5, \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ub3c5\ub9bd\uc801\uc778 \ucf54\ub4dc \uc791\uc131 \uc9c0\uc6d0, \ubaa8\ub378 \ud074\ub798\uc2a4\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc2a4\ud0a4\ub9c8 \uc815\uc758\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Django Templates: \ubcf4\uc5ec\uc8fc\ub294 \ub9c8\ubc95<\/h2>\n\n\n<style>.kb-image4661_5da457-5d .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-image4661_5da457-5d img.kb-img, .kb-image4661_5da457-5d .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-image4661_5da457-5d\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"642\" height=\"278\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-13.png\" alt=\"Django Templates \ub80c\ub354\ub9c1 \ud504\ub85c\uc138\uc2a4 \uc774\ubbf8\uc9c0\" class=\"kb-img wp-image-4669\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-13.png 642w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-13-300x130.png 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-13-600x260.png 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-13-18x8.png 18w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/figure><\/div>\n\n\n\n<p>Templates\uc740 HTML \ud30c\uc77c\uc5d0 Python \ubcc0\uc218\ub97c \ub123\uc744 \uc218 \uc788\uac8c \ud574\uc8fc\ub294 Django\uc758 \ud2b9\ubcc4\ud55c \uae30\ub2a5\uc774\uc5d0\uc694. \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8 \ubaa9\ub85d\uc744 \ubcf4\uc5ec\uc8fc\ub294 \ud15c\ud50c\ub9bf\uc744 \ub9cc\ub4e4\uc5b4\ubcfc\uae4c\uc694?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;h1>My Blog&lt;\/h1>\n&lt;ul>\n{% for post in posts %}\n    &lt;li>\n        &lt;h2>{{ post.title }}&lt;\/h2>\n        &lt;p>{{ post.pub_date|date:\"Y-m-d\" }}&lt;\/p>\n    &lt;\/li>\n{% endfor %}\n&lt;\/ul><\/code><\/pre>\n\n\n\n<p><strong>\ucf54\ub4dc \ud574\uc124<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>&lt;h1>My Blog&lt;\/h1><\/code>: \ud398\uc774\uc9c0 \uc81c\ubaa9\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>{% for post in posts %}<\/code>: Python\uc758 for \ub8e8\ud504\uc640 \ube44\uc2b7\ud558\uac8c, &#8216;posts&#8217; \ub9ac\uc2a4\ud2b8\uc758 \uac01 \ud56d\ubaa9\uc5d0 \ub300\ud574 \ubc18\ubcf5\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>{{ post.title }}<\/code>: &#8216;post&#8217; \uac1d\uccb4\uc758 &#8216;title&#8217; \uc18d\uc131 \uac12\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>{{ post.pub_date|date:\"Y-m-d\" }}<\/code>: &#8216;pub_date&#8217;\ub97c &#8216;Y-m-d&#8217; \ud615\uc2dd\uc73c\ub85c \ucd9c\ub825\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>{% endfor %}<\/code>: for \ub8e8\ud504\uc758 \ub05d\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p>\uc774\ub807\uac8c \ud558\uba74 \ub3d9\uc801\uc73c\ub85c \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8 \ubaa9\ub85d\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc5b4\uc694.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Django Views: \ub85c\uc9c1\uc758 \uc911\uc2ec<\/h2>\n\n\n<style>.kb-image4661_5e723f-c1 .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-image4661_5e723f-c1 img.kb-img, .kb-image4661_5e723f-c1 .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-image4661_5e723f-c1\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"1200\" height=\"708\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12.jpg\" alt=\"Django Views \ud504\ub85c\uc138\uc2a4 \ud750\ub984\ub3c4\" class=\"kb-img wp-image-4665\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12.jpg 1200w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12-300x177.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12-600x354.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12-768x453.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12-18x12.jpg 18w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><figcaption>( Django Views \ud504\ub85c\uc138\uc2a4 \ud750\ub984 )<\/figcaption><\/figure><\/div>\n\n\n\n<p>Views\ub294 Models\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uac00\uc838\uc640 Templates\uc5d0 \uc804\ub2ec\ud558\ub294 \uc911\uac04\ub2e4\ub9ac \uc5ed\ud560\uc744 \ud574\uc694. \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8 \ubaa9\ub85d\uc744 \ubcf4\uc5ec\uc8fc\ub294 view\ub97c \ub9cc\ub4e4\uc5b4\ubcfc\uae4c\uc694?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from django.shortcuts import render\nfrom .models import BlogPost\n\ndef post_list(request):\n    posts = BlogPost.objects.order_by('-pub_date')&#91;:5]\n    return render(request, 'blog\/post_list.html', {'posts': posts})<\/code><\/pre>\n\n\n\n<p><strong>\ucf54\ub4dc \ud574\uc124<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>from django.shortcuts import render<\/code>: Django\uc758 render \ud568\uc218\ub97c \uac00\uc838\uc635\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>from .models import BlogPost<\/code>: \uc6b0\ub9ac\uac00 \ub9cc\ub4e0 BlogPost \ubaa8\ub378\uc744 \uac00\uc838\uc635\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>def post_list(request):<\/code>: &#8216;post_list&#8217;\ub77c\ub294 view \ud568\uc218\ub97c \uc815\uc758\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>posts = BlogPost.objects.order_by('-pub_date')[:5]<\/code>: \uac00\uc7a5 \ucd5c\uadfc\uc758 \ud3ec\uc2a4\ud2b8 5\uac1c\ub97c \uac00\uc838\uc635\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>return render(request, 'blog\/post_list.html', {'posts': posts})<\/code>: \ud15c\ud50c\ub9bf(post_list.html)\uc5d0 \ub370\uc774\ud130(posts)\ub97c \uc804\ub2ec\ud558\uace0 \ub80c\ub354\ub9c1\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p>\uc774 view\ub294 \ucd5c\uadfc 5\uac1c\uc758 \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8 \ub9ac\uc2a4\ud2b8\ub97c \uac00\uc838\uc640\uc11c \ud15c\ud50c\ub9bf\uc5d0 \uc804\ub2ec\ud574\uc694.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Django Forms: \uc785\ub825\uc758 \ub9c8\ubc95\uc0ac<\/h2>\n\n\n<style>.kb-image4661_7ba7a7-7d .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-image4661_7ba7a7-7d img.kb-img, .kb-image4661_7ba7a7-7d .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-image4661_7ba7a7-7d\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"566\" height=\"470\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12.png\" alt=\"Django Forms \ub77c\uc774\ud504\uc0ac\uc774\ud074 \uc774\ubbf8\uc9c0\" class=\"kb-img wp-image-4666\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12.png 566w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12-300x249.png 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-12-14x12.png 14w\" sizes=\"(max-width: 566px) 100vw, 566px\" \/><figcaption>( Django Forms \ub77c\uc774\ud504\uc0ac\uc774\ud074 )<\/figcaption><\/figure><\/div>\n\n\n\n<p>Forms\ub294 \uc0ac\uc6a9\uc790 \uc785\ub825\uc744 \uc27d\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\uac8c \ud574\uc8fc\ub294 Django\uc758 \uac15\ub825\ud55c \uae30\ub2a5\uc774\uc5d0\uc694. \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\ub294 \ud3fc\uc744 \ub9cc\ub4e4\uc5b4\ubcfc\uae4c\uc694?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from django import forms\nfrom .models import BlogPost\n\nclass BlogPostForm(forms.ModelForm):\n    class Meta:\n        model = BlogPost\n        fields = &#91;'title', 'content']<\/code><\/pre>\n\n\n\n<p><strong>\ucf54\ub4dc \ud574\uc124<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>from django import forms<\/code>: Django\uc758 form \uae30\ub2a5\uc744 \uac00\uc838\uc635\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>from .models import BlogPost<\/code>: \uc6b0\ub9ac\uc758 BlogPost \ubaa8\ub378\uc744 \uac00\uc838\uc635\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>class BlogPostForm(forms.ModelForm):<\/code>: ModelForm\uc744 \uc0c1\uc18d\ubc1b\ub294 \uc0c8\ub85c\uc6b4 \ud3fc \ud074\ub798\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>class Meta:<\/code>: \uc774 \ud3fc\uc758 \uba54\ud0c0\ub370\uc774\ud130\ub97c \uc815\uc758\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>model = BlogPost<\/code>: \uc774 \ud3fc\uc774 BlogPost \ubaa8\ub378\uc744 \uae30\ubc18\uc73c\ub85c \ud55c\ub2e4\ub294 \uac83\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>fields = ['title', 'content']<\/code>: \ud3fc\uc5d0 \ud3ec\ud568\ub420 \ud544\ub4dc\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p>\uc774\ub807\uac8c \ub9cc\ub4e0 \ud3fc\uc740 view\uc5d0\uc11c \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5b4\uc694.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Django MTV \uc815\ub9ac\ud558\uae30<\/h2>\n\n\n\n<p>\uc790, \uc774\ub807\uac8c Django MTV \ud328\ud134\uc758 \uac01 \uc694\uc18c\ub97c \uc0b4\ud3b4\ubd24\uc5b4\uc694. Models\ub85c \ub370\uc774\ud130\ub97c \uc815\uc758\ud558\uace0, Templates\ub85c \ubcf4\uc5ec\uc8fc\uace0, Views\ub85c \ub85c\uc9c1\uc744 \ucc98\ub9ac\ud558\uace0, Forms\ub85c \uc785\ub825\uc744 \ubc1b\uc544\uc694. \uc774 \ubaa8\ub4e0 \uac83\uc774 \uc720\uae30\uc801\uc73c\ub85c \uc5f0\uacb0\ub418\uc5b4 \uba4b\uc9c4 \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4e4\uc5b4\ub0b4\ub294 \uac70\uc8e0.<\/p>\n\n\n\n<p>Django MTV \ud328\ud134\uc740 \ucc98\uc74c\uc5d4 \ubcf5\uc7a1\ud574 \ubcf4\uc77c \uc218 \uc788\uc9c0\ub9cc, \uc774\ud574\ud558\uace0 \ub098\uba74 \uc815\ub9d0 \uac15\ub825\ud558\uace0 \ud6a8\uc728\uc801\uc778 \ub3c4\uad6c\uac00 \ub429\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\ub3c4 \uc774\uc81c Django MTV\uc758 \uae30\ubcf8\uc744 \uc54c\uac8c \ub418\uc168\uc73c\ub2c8, \uc9c1\uc811 \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\ub294 \uac74 \uc5b4\ub5a8\uae4c\uc694? \uc2e4\uc81c\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 \uc2e4\ud589\ud574\ubcf4\uba74\uc11c \ub354 \uae4a\uc774 \uc774\ud574\ud560 \uc218 \uc788\uc744 \uac70\uc608\uc694.<\/p>\n\n\n\n<p><a href=\"https:\/\/secondlife.lol\/python-django-website-creation-guide\/\" data-type=\"post\" data-id=\"4339\">\ud30c\uc774\uc36c \uc7a5\uace0 \uc6f9\uc0ac\uc774\ud2b8 \ub9cc\ub4e4\uae30: \ucd08\ubcf4\uc790\ub97c \uc704\ud55c \uac00\uc774\ub4dc<\/a> \ud3ec\uc2a4\ud2b8 \ub9ac\ubdf0\ub97c \ud1b5\ud574\uc11c \uc2e4\uc81c \ud648\ud398\uc774\uc9c0 \uad6c\ucd95\uc744 \uc704\ud55c \uc791\uc5c5\uc744 \uc54c\uc544\ubcf4\uc138\uc694! Django\ub85c \uc6f9 \uac1c\ubc1c\uc744 \uc2dc\uc791\ud558\uc2e0 \uc5ec\ub7ec\ubd84, \ud654\uc774\ud305\uc785\ub2c8\ub2e4!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you're thinking about getting started in web development, especially with Django, you've probably heard of MTV...<\/p>","protected":false},"author":3,"featured_media":4671,"comment_status":"closed","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,811,34,722,717],"class_list":["post-4661","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python-coding","tag-django","tag-mtv-","tag-python","tag-722","tag-717"],"taxonomy_info":{"category":[{"value":3,"label":"\ud30c\uc774\uc36c(Python)"}],"post_tag":[{"value":812,"label":"Django"},{"value":811,"label":"MTV \ud328\ud134"},{"value":34,"label":"python"},{"value":722,"label":"\uc6f9 \uac1c\ubc1c"},{"value":717,"label":"\ud504\ub808\uc784\uc6cc\ud06c"}]},"featured_image_src_large":["https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/Django-MTV-\ud3ec\uc2a4\ud2b8-\uc378\ub124\uc77c-600x600.jpg",600,600,true],"author_info":{"display_name":"TERE","author_link":"https:\/\/secondlife.lol\/en\/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":116,"filter":"raw","cat_ID":3,"category_count":116,"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":811,"name":"MTV \ud328\ud134","slug":"mtv-%ed%8c%a8%ed%84%b4","term_group":0,"term_taxonomy_id":811,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":34,"name":"python","slug":"python","term_group":0,"term_taxonomy_id":34,"taxonomy":"post_tag","description":"","parent":0,"count":21,"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":717,"name":"\ud504\ub808\uc784\uc6cc\ud06c","slug":"%ed%94%84%eb%a0%88%ec%9e%84%ec%9b%8c%ed%81%ac","term_group":0,"term_taxonomy_id":717,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts\/4661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/comments?post=4661"}],"version-history":[{"count":4,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts\/4661\/revisions"}],"predecessor-version":[{"id":4670,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts\/4661\/revisions\/4670"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/media\/4671"}],"wp:attachment":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/media?parent=4661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/categories?post=4661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/tags?post=4661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}