파이썬으로 장고(Django) 공략하기: 입문

파이썬으로 장고(Django) 공략하기: 입문

(11개의 수강평)

235명의 수강생
44,000원
지식공유자 · Sy park
50회 수업 · 총 7시간 33분 수업
평생 무제한 시청
수료증 발급 강의
수강 난이도 '초급'
hello 프로필

TypeError 문의드립니다. hello 1달 전

TypeError at /

'set' object is not reversible

<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p>Hello world!</p>
<p>{{ current_date }}</p>
<p>{{ current_date|date:"YmdHis" }}</p>
<a href="{% url 'select' %}">시작하기!</a>
</body>
</html>

10번째 줄
<a href="{% url 'select' %}">시작하기!</a> 이 부분 코드가 에러라는데 뭐가 문제인지 모르겠습니다. 첫 번째 강의 3.7 버전에서는 잘 됐었는데 혹시 버전 문제인가요? 현제 3.6 버전으로 새로깔아서 하고 있습니다. 혹시나 싶어서 강의 노트에 있는 코드들 그대로 복사해서 붙여넣기 해봐도 문제가 해결이 안됩니다.

1
YeonCheol Jang 프로필

질문입니다! YeonCheol Jang 2달 전

1. urls.py가 두개인데, 두개의 차이점이 뭔가요?

2. path('select/')가 들어가는 '' 부분에는 어떤게 들어가는건가요??? 파이썬 list를 index하는 것은 알지만, 이건 어떻게 쓰인건지 잘 모르겠습니다ㅠㅠ단순히 위치를 불러오는 건 views.가 해주는 것 같은데..

2+(아 다시 생각해보니까 'select'가 도메인의 주소가 되는건가요? 그러면 뒤의 name은 뭐를 뜻하는건가요?)

1
조현열 프로필

페이징 소스 공유합니다. 조현열 2달 전

페이징 구현이 부족한듯하여 제가 만든 소스를 공유해봅니다.

#views.py

from django.shortcuts import render
from third.models import Restaurant
from django.core.paginator import Paginator
import math
from third.forms import RestaurantForm
from django.http import HttpResponseRedirect

# Create your views here.


def list(request):
    restaurants = Restaurant.objects.all()
    pagenator = Paginator(restaurants, 5)
    page = request.GET.get('page')
    if page is None:
        page = 1

    # 시작페이지 끝페이지 구하기
    page_F = float(page)
    if page_F <= 10:
        beginPage = 1
    else:
        beginPage = (math.trunc(page_F / 10)) * 10 + 1

    if (beginPage + 10) > pagenator.num_pages:
        lastPage = pagenator.num_pages
    else:
        lastPage = beginPage + 9
    nextRangeStartPage = lastPage + 1

    pageRange = []
    for num in range(beginPage, lastPage+1):
        pageRange.append(num)

    items = pagenator.get_page(page)
    context = {
        'restaurants': items,
        'lastPage': lastPage,
        'pageRange': pageRange,
        'nextRangeStartPage': nextRangeStartPage,
    }
    return render(request, 'third/list.html', context)

#list.html

{% extends 'third/base.html' %}
{% load static %}
{% block content %}
<div class="container">
    {% for item in restaurants %}
        <div class="row restaurant-item" style="margin:20px auto;">
            <div class="col-sm-12">
                <div class="card border-secondary">
                    <div class="card-body">
                        <h5 class="card-title">{{ item.name }}</h5>
                        <p class="card-subtitle mb-2 text-muted">{{ item.address }}</p>
                        <p class="card-text">음식점 설명</p>
                        <a href="#" class="card-link">자세히 보기</a>
                        <a href="#" class="card-link">수정하기</a>
                    </div>
                </div>
            </div>
        </div>
    {% endfor %}

    <div class="row">
        <div class="col-sm-12 text-center">
            <div class="pagination">
                <spen class="step-links text-center" style="width:100%;">

                    {% if restaurants.has_previous %}
                        <a href="?page=1">&laquo;</a>
                    {%  endif %}

                    {% for pageNum in pageRange %}
                        {% if restaurants.number == pageNum %}
                            <spen class="current">
                                {{ restaurants.number }}
                            </spen>
                        {% else %}
                           <a href="?page={{ pageNum }}">{{ pageNum }}</a>
                        {% endif %}
                    {% endfor %}

                    {% if restaurants.paginator.num_pages > lastPage %}
                        <a href="?page={{ nextRangeStartPage }}">&raquo;</a>
                    {% endif %}

                </spen>
            </div>
        </div>
    </div>
</div>
{% endblock %}

1
조현열 프로필

views.py파일의 " instance=" 이라는 키워드를 사용하는 이유가 궁금합니다. 조현열 2달 전

본강좌 34Line에 기술하신

form = RestaurantForm(request.POST, instance=item)

여기서

1. request.POST는 초기화이고

2. instance=item 수정될 데이터가 item에 저장된 pk의 값이라는 것은 이해가 가는데, 그럴경우 pk=item이라고 해야 맞는것이 아닐까요?

3. 구글링을 조금더 해본결과 "수정시에는 instance=post 를 지정해줌으로서 기존에 있던 데이터를 불러올 수 있다."

라고 적혀있었습니다.

구글링 해본결과

As the documentation states, the "instance" keyword argument is passed the model whose relations that the formset will edit.

라고 기술되어있는데요.

도대체 instance라는 변수가 어느것의 property이고 어떤역활을 하는지 궁금합니다.

pk키워드는 앞에있는 ORM 메서드를 사용하였을경우 사용하는 것으로 보이며

instance키워드는 RestaurantForm이라는 객체를 초기화할 경우 사용되는 것으로 보입니다만.

개념이 에메모호하여 정확한 설명 부탁드립니다.

===============================================

Instances

Not unlike the ambiguity between "class" and "type", "instance" is synonymous to "object". Think of it this way: objects are instances of types. So, "42 is an instance of the type int" is equivalent to "42 is an int object". I usually use "instance" and "object" interchangeably. In some cases when I want to specifically refer to objects as artifacts of the CPython implementation, I will try to use "instance" to refer to actual instances of classes. Another place where the term "instance" is explicitly used by Python is in built-ins like isinstance and the special __instancecheck__ attribute.

===============================================

다른언어를 사용하던 개발자로서 instance= 해당 코드에서 어떤역활을 하는지 알수가 없어 답답함에 여쭤봅니다.

1
Juntaek Lee 프로필

no such table이라고 뜨는 오류좀 봐주세요 Juntaek Lee 5달 전

1분35초경의 강의를 따라하다가 다음과 같은 에러가 발생합니다.

 

>>> post= Post.objects.create(title="this is title", content="this is content")

Traceback (most recent call last):

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute

    return self.cursor.execute(sql, params)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute

    return Database.Cursor.execute(self, query, params)

sqlite3.OperationalError: no such table: second_post

 

The above exception was the direct cause of the following exception:

 

Traceback (most recent call last):

  File "<console>", line 1, in <module>

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method

    return getattr(self.get_queryset(), name)(*args, **kwargs)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/query.py", line 422, in create

    obj.save(force_insert=True, using=self.db)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/base.py", line 741, in save

    force_update=force_update, update_fields=update_fields)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/base.py", line 779, in save_base

    force_update, using, update_fields,

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/base.py", line 870, in _save_table

    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/base.py", line 908, in _do_insert

    using=using, raw=raw)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method

    return getattr(self.get_queryset(), name)(*args, **kwargs)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/query.py", line 1186, in _insert

    return query.get_compiler(using=using).execute_sql(return_id)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1335, in execute_sql

    cursor.execute(sql, params)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 99, in execute

    return super().execute(sql, params)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute

    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers

    return executor(sql, params, many, context)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute

    return self.cursor.execute(sql, params)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__

    raise dj_exc_value.with_traceback(traceback) from exc_value

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute

    return self.cursor.execute(sql, params)

  File "/home/beanzsoft/Projects/HelloDjango/venv/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute

    return Database.Cursor.execute(self, query, params)

django.db.utils.OperationalError: no such table: second_post

 

1
폭탄벌레 프로필

끝까지 했는데 internal server error가 뜨는데요 폭탄벌레 5달 전

에러 어떻게 볼수있나요?

1
Sujin Lee 프로필

장고 접속 방법 Sujin Lee 6달 전

장고에 접속할 때마다 cmd창에서 virtualenv venv를 입력해야 하나요?

1
황진성 프로필

ModelForm에서 initial과 instance의 차이? 황진성 7달 전

ModelForm에서 initial과 instance의 차이가 궁금합니다.

1
여어 프로필

강의내용중에 질문드립니다. 여어 8달 전

프-서빙 프론트엔드 (최종결과물 ) 템플레이팅을 거쳐서 내려준다고 하셨는데

이 부분을 서버사이드 렌더링

클라이언트에서 조합해서 렌더링 하면 클라이언트 렌더링으로 하는 부분이 맞나요???

1
한현미 프로필

Database 한현미 9달 전

sqlite3 의 양식대로 저장을 한다는 뜻인가요, 아니면 장고 프로그램안에 sqlite3이 있어서 그 안에 저장을 해준다는 뜻인가요?

1
한현미 프로필

templatedoesnotexist at 에러 한현미 9달 전

제목 그대로 템플레이츠를 찾을수 없다고 뜨네요! ㅠㅠ

1
pyj789123 프로필

typeerror pyj789123 8달 전

index.html

<html lang = 'en'>

Title

Hello World

{{ current_date }}

{{ current_date|date:"Y년 m월 d일 H시 i분 s초" }}

시작하기!

result.html

Title

    {% for num in numbers %}

  • {{ num }}
  • {% endif %}

views.py

from django.shortcuts import render

from django.http import HttpResponse

from django.template import loader

from datetime import datetime

def index(request):

now = datetime.now()

context = {

'current_date' : now

}

return render(request, 'index.html', context)

def select(request):

context = {'number':4}

return render(request, 'select.html', context)

def result(request):

context = {'numbers': [1,2,3,4,5,6]}

return render(request, 'select.html', context)

'''TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

[21/Feb/2019 21:25:19] "GET /result/ HTTP/1.1" 500 113375

'''

타입에러가 발생하는데 어디가 문제일까요?

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스