월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
include mine.types; 관련 질문입니다.
안녕하세요. 강의 잘 듣고 있습니다. 질문이 있어서요. 강의 영상처럼 해당 include 로 실행하니 nginx 컨테이너 생성 시 에러가 나더라구요 에러는 : open() "/etc/nginx/mine.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:10 이렇게 났었고 해결은 include /etc/nginx/mime.types; 이렇게 고쳐주고나서 에러를 해결했는데.. 혹시 제가 강의 중에 놓친 부분이 있는걸까요 ?
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
portainer 이미지를 빌드 할 수 없습니다
좋은강의 감사합니다 여기서 막혀서 진도를못나가네요 ㅠ 파이참에서 Dockerfile 만들고 upload해도 이미지를 빌드할 수 없다고 나오고 web editor 로 해도 똑같이나오네요... 어떻게 해야 하나요? 이거말곤 방법이 아예없나요? 2일간 구글링해도 답이 안나오네요 ㄷ
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
24강 html 파일 안에서 변수 사용 질문 (context 관련)
제가 여태까지 강의를 들으면서 이해하기로는 html 파일 안에서 특정 변수를 쓸 때 views.py에서 context 구문 안에 변수를 넣어 보내는 걸로 이해했습니다. 예를 들어, hello_world view에선 context ={ 'hello_world_list' : hello_world_list } 이런 식으로 'hello_world_list'라는 이름의 변수에 hello_world_list를 할당(?)해서 html 안에서 {% if hello_world_list %} 이런 식으로 쓸 수 있는 걸로 이해했습니다. 만약 제 생각이 맞다면, DetailView에서는 따로 user 라는 이름에 할당한 변수가 없는데 어떻게 바로 user라는 변수를 가져와서 쓸 수 있는건가요? class 기반의 view는 function 기반의 view와는 달리 작동하는 건가요?
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
SECRET_KEY 적용 문제
안녕하세요 강의 중 잘 안되는게 있어서 질문드립니다. 강의를 따라하는 중 .env에 SECRET_KEY값을 담아서 사용하는데 다음과같은 에러가 발생합니다. C:\Users\deokpro\Desktop\Django\venv\lib\site-packages\environ\environ.py:628: UserWarning: C:\Users\deokpro\Desktop\Django\pragmatic\pragmatic\.env doesn't exist - if you're not configuring your environment separately, create one. warnings.warn( Traceback (most recent call last): File "C:\Users\deokpro\Desktop\Django\venv\lib\site-packages\environ\environ.py", line 273, in get_value value = self.ENVIRON[var] File "C:\Users\deokpro\AppData\Local\Programs\Python\Python39\lib\os.py", line 679, in __getitem__ raise KeyError(key) from None KeyError: 'SECRET_KEY' ........ django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable print문으로 env('SECRET_KEY')를 찍어보면 값이 정상적으로 들어오는게 확인되는데 python manage.py runserver만 하면 에러가 발생합니다. 혹시 해당내용 관련해서 조언을 구하고자 질문드립니다.
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
pragmatic/accountapp/urls.py 의 path 함수 질문드립니다.
안녕하세요. 강의 중 궁금한 점이 생겨 질문 올립니다. pragmatic/accountapp/urls.py 에서 path를 쓰는데 path('hello_world/', hello_world, name='hello_world') 이때 1번째 매개변수는 주소창에 url 입력을 나타내는것 같고2번째 매개변수는 함수를 뜻하는 것 같습니다.그렇다면 3번 째 name은 뭔지 궁금합니다. ㅡㅡㅡ질문ㅡㅡㅡ 1, 제가 생각하는 매개변수 첫번째와 두번째의 의미가 맞나요? 2. 3번 째 매개변수 name은 무엇을 나타내는 건가요? ㅡㅡㅡㅡㅡㅡ
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
54강. nginx-gunicorn 연결
안녕하세요. 54강에서 실행중인 장고 컨테이너에 nginx를 붙였는데요. nginx를 붙였음에도 static 파일을 못가져 온 이유를 모르겠습니다. 여기서는 nginx와 django를 동기화하는 수단이 볼륨이고, 볼륨을 생성해서 도커 자체에서 제공한다는 개념인거같은데 nginx자체에서 static 파일들을 제공할 수 있어야 하는거 아닌가요?? 당장 안 된다면 그렇게 되도록 설정할 수 있는지 궁금합니다! 그리고 볼륨없이 nginx가 django에 요청을 통해서 static 파일들을 가져오지 못 하는지 궁금합니다.
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
시크릿 키의 용도가 궁금합니다.
안녕하세요. 강의를 듣는 중 시크릿 키가 궁금해서 질문드립니다. 시크릿 키가 생성된 이유와 어디에 쓰이는 지 왜 필요한지 등 전반적인 개념이 궁금합니다.
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
502 bad Gateway
안녕하세요 강사님 . 54강 마지막 부분에서 ip 주소를 입력했을때 다음과 같이 나와서 연락드립니다. django_container_gunicorn 도 자동으로 종료가 됩니다 ..ㅠㅠ
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
magicGrid.positionItems(); 코드를 작성한 이후부터 div 태그들의 위치가 고정되어 나타납니다.
안녕하세요 실습 중 magicgrid.js에 var masonrys = document.getElementByTagName('img');for (let i = 0; i< masonrys.length; i++) { masonrys[i].addEventListener('load', function() { magicGrid.positionItems(); }, false);} 위 코드를 작성하면, 다음과 같이 화면이 뜹니다. div 태그들의 위치가 한 곳에 고정되어 모두 겹쳐서 나타나요. 이유가 무엇일까요? 작성한 코드를 첨부합니다.. {% extends 'base.html' %}{% load static %}{% block content %}<style>.container div { width: 250px; background-color: antiquewhite; display: flex; justify-content: center; align-items: center; border-radius: 1rem;}.container img { width : 100%; border-radius : 1rem; }</style><div class="container"><div class="item1"> <img src="https://picsum.photos/200/300"></div><div class="item2">2</div><div class="item3">3</div><div class="item4">4</div><div class="item5">5</div><div class="item6">6</div><div class="item7">7</div><div class="item8">8</div><div class="item9">9</div><div class="item10">10</div><div class="item11">11</div><div class="item12">12</div><div class="item13">13</div></div><script src="{% static 'js/magicgrid.js' %}"></script>{% endblock %} 'use strict';/*** @author emmanuelolaojo* @since 11/11/18*//*** Validates the configuration object.** @param config - configuration object*/var checkParams = function (config) {var DEFAULT_GUTTER = 25;var booleanProps = ["useTransform", "center"];if (!config) {throw new Error("No config object has been provided.");}for(var prop of booleanProps){if(typeof config[prop] !== "boolean"){config[prop] = true;}}if(typeof config.gutter !== "number"){config.gutter = DEFAULT_GUTTER;}if (!config.container) { error("container"); }if (!config.items && !config.static) { error("items or static"); }};/*** Handles invalid configuration object* errors.** @param prop - a property with a missing value*/var error = function (prop) {throw new Error(("Missing property '" + prop + "' in MagicGrid config"));};/*** Finds the shortest column in* a column list.** @param cols - list of columns** @return shortest column*/var getMin = function (cols) {var min = cols[0];for (var col of cols) {if (col.height < min.height) { min = col; }}return min;};/*** @author emmanuelolaojo* @since 11/10/18** The MagicGrid class is an* implementation of a flexible* grid layout.*/var MagicGrid = function MagicGrid (config) {checkParams(config);if (config.container instanceof HTMLElement) {this.container = config.container;this.containerClass = config.container.className;}else {this.containerClass = config.container;this.container = document.querySelector(config.container);}this.items = this.container.children;this.static = config.static || false;this.size = config.items;this.gutter = config.gutter;this.maxColumns = config.maxColumns || false;this.useMin = config.useMin || false;this.useTransform = config.useTransform;this.animate = config.animate || false;this.started = false;this.center = config.center;this.init();};/*** Initializes styles** @private*/MagicGrid.prototype.init = function init () {if (!this.ready() || this.started) { return; }this.container.style.position = "relative";for (var i = 0; i < this.items.length; i++) {var style = this.items[i].style;style.position = "absolute";if (this.animate) {style.transition = (this.useTransform ? "transform" : "top, left") + " 0.2s ease";}}this.started = true;};/*** Calculates the width of a column.** @return width of a column in the grid* @private*/MagicGrid.prototype.colWidth = function colWidth () {return this.items[0].getBoundingClientRect().width + this.gutter;};/*** Initializes an array of empty columns* and calculates the leftover whitespace.** @return {{cols: Array, wSpace: number}}* @private*/MagicGrid.prototype.setup = function setup () {var width = this.container.getBoundingClientRect().width;var colWidth = this.colWidth();var numCols = Math.floor(width/colWidth) || 1;var cols = [];if (this.maxColumns && numCols > this.maxColumns) {numCols = this.maxColumns;}for (var i = 0; i < numCols; i++) {cols[i] = {height: 0, index: i};}var wSpace = width - numCols * colWidth + this.gutter;return {cols: cols, wSpace: wSpace};};/*** Gets the next available column.** @param cols list of columns* @param i index of dom element** @return {*} next available column* @private*/MagicGrid.prototype.nextCol = function nextCol (cols, i) {if (this.useMin) {return getMin(cols);}return cols[i % cols.length];};/*** Positions each item in the grid, based* on their corresponding column's height* and index then stretches the container to* the height of the grid.*/MagicGrid.prototype.positionItems = function positionItems () {var ref = this.setup();var cols = ref.cols;var wSpace = ref.wSpace;var maxHeight = 0;var colWidth = this.colWidth();wSpace = this.center ? Math.floor(wSpace / 2) : 0;for (var i = 0; i < this.items.length; i++) {var col = this.nextCol(cols, i);var item = this.items[i];var topGutter = col.height ? this.gutter : 0;var left = col.index * colWidth + wSpace + "px";var top = col.height + topGutter + "px";if(this.useTransform){item.style.transform = "translate(" + left + ", " + top + ")";}else{item.style.top = top;item.style.left = left;}col.height += item.getBoundingClientRect().height + topGutter;if(col.height > maxHeight){maxHeight = col.height;}}this.container.style.height = maxHeight + this.gutter + "px";};/*** Checks if every item has been loaded* in the dom.** @return {Boolean} true if every item is present*/MagicGrid.prototype.ready = function ready () {if (this.static) { return true; }return this.items.length >= this.size;};/*** Periodically checks that all items* have been loaded in the dom. Calls* this.listen() once all the items are* present.** @private*/MagicGrid.prototype.getReady = function getReady () {var this$1 = this;var interval = setInterval(function () {this$1.container = document.querySelector(this$1.containerClass);this$1.items = this$1.container.children;if (this$1.ready()) {clearInterval(interval);this$1.init();this$1.listen();}}, 100);};/*** Positions all the items and* repositions them whenever the* window size changes.*/MagicGrid.prototype.listen = function listen () {var this$1 = this;if (this.ready()) {var timeout;window.addEventListener("resize", function () {if (!timeout){timeout = setTimeout(function () {this$1.positionItems();timeout = null;}, 200);}});this.positionItems();}else { this.getReady(); }};let magicGrid = new MagicGrid({container: '.container',animate: true,gutter: 30,static: true,useMin: true});var masonrys = document.getElementByTagName('img');for (let i = 0; i< masonrys.length; i++) { masonrys[i].addEventListener('load', function() { magicGrid.positionItems(); }, false);}magicGrid.listen();
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
23강 bootstrap form 질문
강의를 똑같이 진행하고 있는데 강사님 화면이랑 다르네요... {% bootstrap_form from %} 으로 form에 bootstrap을 적용시켜도 저는 UserName, Password , input:text와 같은 요소들이 margin이 없이 서로 붙어있어요...ㅠㅠ 강사님 화면은 알아서 margin 설정되는 것 같은데 왜 이런 건가요? 제 화면은 아래와 같습니다.
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
form_valid에 관해서 질문드립니다!
안녕하세요! 수업 일정 차수들을 수강하고 참고하여 개인적으로 다른 서비스를 만들어보고있는 와중에 질문드립니다! ArticleCreationForm을 구현하실때 writer는 서버내에서 설정해주신다고 하시면서 view단에서 temp_article.writer = self.request.user 라고 적어줘서 완성해주신 것 같습니다. 이것을 토대로 사진과 같이 view를 짜봤습니다. 모델의 빨간색 체크부분인 target을 form단에서 처리하지않고 view단에서 서버내에서 설정해주고 싶은데 view단의 체크부분 temp_review.target = 이후에 어떤 코드를 입력해줘야 모델 Riview의 target을 가져와서 user와 같은 뉘앙스로 처리할수있을지를 모르겠습니다. 구글링을 해도 잘 모르겠어서 질문올립니다!
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
9강 질문
settings.py 에서 template 경로를 BASE_DIR 안에 있는 templates 폴더로 정했는데, 이후 마지막에 account app의 views에서 accountapp/hello_world.html 로 경로를 정하면 BASE_DIR에 있는 templates 폴더에서 accountapp/hello_world.html를 찾아야 하는 거 아닌가요? 당연히 거기 안에는 hello_world.html는 커녕 accountapp 폴더도 없으니 오류가 떠야 하는 거 아닌가요...? 왜 accountapp 폴더 만든 templates 폴더는 경로를 알려주지 않고 바로 사용이 가능한가요...? 이게 app 안의 templates는 안에 만들어놓기만 하면 settings.py에 설정 안 하고 바로 사용이 가능하다고 하면, 그 안에 {% extends 'base.html' %} 는 어떻게 다른 경로, 즉 BASE_DIR의 templates 폴더 안에 있는 base.html을 찾을 수 있는건가요...?
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
git을 다른데서 받아서 작업하려면 어떡해야하나요?
git 사용에 대해 문의드립니다. git을 clone해서 다른 pc에서 작업을 하려하는데 가상환경 세팅을 어떻게 해야하는지 참고할만한 자료가 있을까요
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
venv 폴더 안에 script가 안 보입니다
리눅스 우분투 환경에서 파이참을 실행해서 따라가고 있습니다만 디버깅 환경 설정을 위한 venv 폴더 아래의 script 파일이 안 보입니다. 장고 혹은 파이참이 업데이트 되면서 생성되지 않는 것인지 혹은 디버깅 설정을 안 해도 괜찮을지 궁금합니다.
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
related_name의 역할
related_name의 역할이 정확하게 무엇인가요? # profileapp의 models.pyuser = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile') # articleapp의 models.pywriter = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='article', null=True)# commentapp의 models.pyarticle = models.ForeignKey(Article, on_delete=models.SET_NULL, null=True, related_name='comment')writer = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='comment')relaated_name이 정확하게 어떻게 쓰이는지 잘 모르겠습니다..!
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
foreignkey와 onetoonefield의 차이점이 뭔가요
수업 잘 듣고있습니다 :) 항상좋은수업 감사합니다. 질문내용은 제목과같습니다 foreignkey와 onetoonefield의 차이점이 뭔가요? article에서는 writer를 foregnkey로 받고, profile에서는 user를 onetoone으로 받으셨는데 둘의 차이점이 뭘까요?
- 해결됨작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
Image 빌드 시 requirements.txt 오류
# 베이스 이미지 가져오기 -> Python 공식 이미지 ( dockerhub에 존재 ) FROM python:3.9.0 WORKDIR /home/ RUN git clone https://github.com/isdiscodead/likelion_django_study.git WORKDIR /home/likelion_django_study/ # requirements에 있는 라이브러리들 모두 설치 RUN pip install -r requirements.txt # 환경 변수 가져오기 RUN echo "SECRET_KEY=django-insecure-me&5g=_kl*c1okm22^&(=j02)i6&2tuhpu!au8%oi3b3+fwoxz" > .env # db 연동 RUN python manage.py migrate EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] 이후 오류 메시지 pip install --upgrade pip 실행했을 때도 결국 동일한 오류 발생 깃 경로 잘못된 것 없어보임 깃 링크 들어가보면 알 수 있다시피 requirements.txt 멀쩡히 있음 어째서일까요??... ㅠㅠ
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
IP 주소로 들어가면 장고 사이트가 뜨지않고 여전히 nginx가 뜹니다.
안녕하세요. 54강 보면 마지막에 IP주소로 들어가면 바로 nginx가 아닌 연결된 장고 사이트로 접속 되는데 저는 여전히 nginx가 뜨네요. 강사님이랑 똑같이 진행한것같은데 안됩니다. 어떤 부분이 잘못된것일까요? nginx.conf 파일질라 nginx 컨테이너 설정값 django_container_gunicorn 참고로 aws입니다.
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
pk, *args, **kwargs 질문
안녕하세요! 먼저 좋은 강의 감사드립니다. Django를 처음 접했는데 좋은 선생님을 만나서 차근차근 잘 배운 것 같습니다. 몇 가지 궁금한 점 알려주실 수 있으실까요? 1. templates/base.html에서 {% for message in messages %} 와 {{message}}부분이 나오는데 이건 어디서 가져오는 건지 궁금합니다. 2. templates/header.html에서 {% ~ pk=user.pk %}구문이 있는데 user.pk는 어디서 가져오는 건지 연결 관계가 궁금합니다 또 ?next={{request.path}}구문에서 request.path는 어디서 가져오는 건지 연결관계가 궁금합니다.. 3. subscribeapp/views.py에서 def get_redirect_url(self. *args, **kwargs): return reverse ('projectapp:detail', kwargs={'pk':self.request.GET.get('project_pk')}) 에서 *args, **kwargs를 검색해보니 임의의 값, 임의의 복수 값을 받을 때 쓰는 거라고 하는데 이 구문이 잘 이해가 되지 않습니다 4. projectapp/urls.py에서 path('detail/<int:pk>', ~), 에서 <int:pk>는 어디서 받아오는 것인지 궁금합니다 5.projectapp/templates/snippets/pagenation.html 에서 ?page={{page_obj.number}} {{page_obj.previous_page_number}} 가 잘 이해가 되지 않습니다.. 이것들은 어디서 받아오는 것인지요?? 그리고 이해하려고 전체 코드도 몇번 읽고 검색도 해봤는데 해결이 되지 않아 질문 드립니다 혼자 독학하는 코린이인데 연결관계 부분만 이해하면 지금보다 잘 할 수 있을 것 같아 도움 요청합니다 좋은 강의 올려주셔서 감사합니다
- 미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
깃허브 주소좀 알려주실수 있나요?
안녕하세요. 강의 잘 듣고있습니다. 코드 따라치다가 동작이 잘 안되는 부분이 있어서 영상 돌려보면서 찾아봤는데도 잘 안되네요. 작업한 코드 비교할수 있게끔 깃허브 주소 알려주실수 있을까요?