Skip to content

Commit c8ad73e

Browse files
authored
Merge pull request DjangoGirls#1476 from malkoG/master
Update Korean Translation for Django 2.0 & Add warning icon
2 parents 6a50c23 + d739b0e commit c8ad73e

13 files changed

Lines changed: 72 additions & 96 deletions

File tree

ko/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
[이수진](https://github.com/sujinleeme)
1515
> - 3차 : 2017. 5. 19.
1616
[이수진](https://github.com/sujinleeme)
17+
> - 4차 : 2019. 2. 5.
18+
[이재열](https://github.com/malkoG), [정수민](https://github.com/soomin-jeong)
1719

1820

1921
## 환영합니다

ko/deploy/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,10 @@ Installing setuptools, pip...done.
186186
187187
$ source myvenv/bin/activate
188188
189-
(myvenv) $ pip install django~=1.11.0
189+
(myvenv) $ pip install django~=2.0
190190
Collecting django
191191
[...]
192-
Successfully installed django-1.11.3
192+
Successfully installed django-2.0.6
193193
```
194194

195195
> **Note** `pip install`은 설치가 될 때까지 인내심이 조금 필요해요. 하지만 몇 분 안에 완료될 거니 조금만 기다려보세요. 만약 5분 이상 시간이 지났다면, 무엇인가 잘못된 거니 코치에게 물어보세요.

ko/django_admin/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,6 @@ Superuser created successfully.
4747

4848
![Django admin](images/edit_post3.png)
4949

50-
장고 관리자에 대해서 좀 더 알고 싶다면 장고 공식 문서를 읽어보세요 : https://docs.djangoproject.com/en/1.8/ref/contrib/admin/
50+
장고 관리자에 대해서 좀 더 알고 싶다면 장고 공식 문서를 읽어보세요 : https://docs.djangoproject.com/en/2.0/ref/contrib/admin/
5151

5252
자, 우리는 내 첫 번째 장고 모델을 만들었어요! 잠깐 쉴 시간이 필요해요. 열심히 했으니 재충전을 위해 커피 한 잔(또는 차 한 잔) 또는 뭔가 먹고 돌아오세요.

ko/django_forms/README.md

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -92,20 +92,20 @@ class PostForm(forms.ModelForm):
9292

9393
{% filename %}blog/urls.py{% endfilename %}
9494
```python
95-
url(r'^post/new/$', views.post_new, name='post_new'),
95+
path('post/new', views.post_new, name='post_new'),
9696
```
9797

9898
전체 코드는 아래와 같을 거예요.
9999

100100
{% filename %}blog/urls.py{% endfilename %}
101101
```python
102-
from django.conf.urls import url
102+
from django.urls import path
103103
from . import views
104104

105105
urlpatterns = [
106-
url(r'^$', views.post_list, name='post_list'),
107-
url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),
108-
url(r'^post/new/$', views.post_new, name='post_new'),
106+
path('', views.post_list, name='post_list'),
107+
path('post/<int:pk>/', views.post_detail, name='post_detail'),
108+
path('post/new/', views.post_new, name='post_new'),
109109
]
110110
```
111111

@@ -224,16 +224,11 @@ from django.shortcuts import redirect
224224

225225
{% filename %}blog/views.py{% endfilename %}
226226
```python
227-
from django.shortcuts import redirect
227+
return redirect('post_detail', pk=post.pk)
228228
```
229229

230230
`post_detail`은 우리가 이동해야 할 뷰의 이름이에요 *post_detail 뷰*`pk`변수가 필요한 거 기억하고 있겠죠? `pk=post.pk`를 사용해서 뷰에게 값을 넘겨줄 거에요. 여기서 `post`는 새로 생성한 블로그 글이에요.
231231

232-
{% filename %}blog/views.py{% endfilename %}
233-
```python
234-
return redirect('post_detail', pk=post.pk)
235-
```
236-
237232
잘했어요. 너무 설명이 길어졌네요. 이제 *view* 전체 코드를 확인할게요.
238233

239234
{% filename %}blog/views.py{% endfilename %}
@@ -309,7 +304,7 @@ def post_new(request):
309304

310305
{% filename %}blog/urls.py{% endfilename %}
311306
```python
312-
url(r'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'),
307+
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
313308
```
314309

315310
우리는 `blog/templates/blog/post_edit.html` 템플릿을 재사용할 거에요. 마지막으로 할 일은 *view* 를 만드는 것입니다.
@@ -363,20 +358,20 @@ form = PostForm(instance=post)
363358
축하합니다! 여러분의 어플리케이션이 점점 더 완벽해지고 있어요!
364359

365360
장고 폼에 대해 자세한 정보가 필요하다면 공식 문서를 읽어보세요. :
366-
https://docs.djangoproject.com/en/1.11/topics/forms/
361+
https://docs.djangoproject.com/en/2.0/topics/forms/
367362

368363
## 보안
369364

370365
링크를 클릭해 새로운 포스트가 나오게 만드는 것은 멋진 일이에요! 지금은 웹사이트를 방문하는 누구든지 글을 쓸 수 있지만, 그렇게 하고 싶지 않을 수 있어요. 나에게만 보이고 다른 사람에게는 보이지 않는 버튼을 만들어 볼게요.
371366

372-
`blog/templates/blog/base.html` 파일에서, `page-header` `div`를 찾아 그 위에 아래와 같이 입력합니다 :
367+
`blog/templates/blog/base.html` 파일에서, `page-header` `div`를 찾아 아래와 같이 작성된 앵커 태그(Anchor Tag)를 찾습니다.
373368

374369
{% filename %}blog/templates/blog/base.html{% endfilename %}
375370
```html
376371
<a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>
377372
```
378373

379-
여기에 `{% if %}`태그를 추가해 관리자로 로그인한 유저들만 링크가 보일 수 있게 만들 거에요. 그게, 바로 여러분이죠! `<a>`태그를 아래와 같이 변경하세요 :
374+
여기에 `{% if %}`태그를 추가해 관리자로 로그인한 유저들만 링크가 보일 수 있게 만들 거에요. 그게, 바로 여러분이죠! `<a>`태그를 아래와 같이 변경하세요.
380375

381376
{% filename %}blog/templates/blog/base.html{% endfilename %}
382377
```html
@@ -389,12 +384,12 @@ https://docs.djangoproject.com/en/1.11/topics/forms/
389384

390385
세부 페이지에 있는 수정 아이콘이 기억나죠? 이번에도 동일하게 다른 사람들이 게시글을 수정하지 못하게 할 거에요.
391386

392-
`blog/templates/blog/post_detail.html`파일을 열어 아래 내용을 추가하세요.
387+
`blog/templates/blog/post_detail.html`파일을 열어 아래와 같이 작성된 라인을 찾아주세요.
393388

394389
```html
395390
<a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"></span></a>
396391
```
397-
이렇게 바꾸세요. :
392+
이렇게 바꾸세요.
398393

399394
{% filename %}blog/templates/blog/post_detail.html{% endfilename %}
400395
```html
@@ -419,7 +414,7 @@ $ git commit -m "Added views to create/edit blog post inside the site."
419414
$ git push
420415
```
421416

422-
* 그 다음 [PythonAnywhere Bash console](https://www.pythonanywhere.com/consoles/)을 여세요 :
417+
* 그 다음 [PythonAnywhere Bash console](https://www.pythonanywhere.com/consoles/)을 여세요. :
423418

424419
{% filename %}command-line{% endfilename %}
425420
```

ko/django_installation/instructions.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,15 +156,15 @@ $ . myvenv/bin/activate
156156
```
157157
(myvenv) ~$ python3 -m pip install --upgrade pip
158158
```
159-
그런 다음 `pip install django~=1.11.0`(Django를 설치하려면 물결표 뒤에 등호 :`~=`)를 입력해 장고를 설치하세요.
159+
그런 다음 `pip install django~=2.0.0`(Django를 설치하려면 물결표 뒤에 등호 :`~=`)를 입력해 장고를 설치하세요.
160160

161161
{% filename %}command-line{% endfilename %}
162162
```
163-
(myvenv) ~$ pip install django~=1.11.0
164-
Collecting django~=1.11.0
165-
Downloading Django-1.11.3-py2.py3-none-any.whl (6.8MB)
166-
Installing collected packages: django
167-
Successfully installed django-1.11.3
163+
(myvenv) ~$ pip install django~=2.0.0
164+
Collecting Django~=2.0.6
165+
Downloading Django-2.0.6-py3-none-any.whl (7.1MB)
166+
Installing collected packages: Django
167+
Successfully installed Django-2.0.6
168168
```
169169

170170
<!--sec data-title="Windows" data-id="django_err_windows" data-collapse=true ces-->

ko/django_models/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ class Post(models.Model):
149149
* `models.DateTimeField` - 날짜와 시간을 의미합니다.
150150
*   `models.ForeignKey` - 다른 모델에 대한 링크를 의미합니다.
151151

152-
시간 관계상 모든 코드를 하나하나 다 설명하지는 않을 거예요. 대신 모델의 필드와 정의하는 방법에 궁금하다면 장고 공식 문서를 꼭 읽어보길 바랍니다. : https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-types)
152+
시간 관계상 모든 코드를 하나하나 다 설명하지는 않을 거예요. 대신 모델의 필드와 정의하는 방법에 궁금하다면 장고 공식 문서를 꼭 읽어보길 바랍니다. : https://docs.djangoproject.com/en/2.0/ref/models/fields/#field-types)
153153

154154
`def publish(self):`는 무슨 뜻일까요? 이것이 바로 앞서 말했던 `publish`라는 메서드(method) 입니다. `def`는 이것이 함수/메서드라는 뜻이고, `publish`는 메서드의 이름입니다. 원한다면 메서드 이름을 변경할 수도 있어요. 이름을 붙일 때는 공백 대신, 소문자와 언더스코어를 사용해야 합니다. 예를 들어, 평균 가격을 계산하는 메서드는 `calculate_average_price`라고 부를 수 있겠네요.
155155

ko/django_urls/README.md

Lines changed: 15 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -20,104 +20,79 @@ URL은 웹 주소랍니다. 웹 사이트를 방문할 때마다 브라우저의
2020
2121
[...]
2222
"""
23-
from django.conf.urls import url
2423
from django.contrib import admin
24+
from django.urls import path
2525

2626
urlpatterns = [
27-
url(r'^admin/', admin.site.urls),
27+
path('admin/', admin.site.urls),
2828
]
2929
```
3030

3131
장고가 이미 어떤 내용을 넣어 두었네요.
3232

33-
`#`로 시작되는 줄은 주석이에요. 파이썬은 주석을 실행하지 않아요. 꽤 유용하겠죠?
33+
세 개의 따옴표들(`"""`, `'''`) 사이에 있는 줄들은 독스트링(docstring)입니다. 독스트링은 파일 제일 첫 부분, 클래스 또는 메서드 윗 부분에 작성해, 이들이 어떤 일을 수행하는지 알려줍니다. 파이썬은 이 부분을 실행하지 않을 거에요.
3434

3535
이전 장에서 봤던 관리자 URL도 여기에 이미 있어요.
3636

3737
{% filename %}mysite/urls.py{% endfilename %}
3838
```python
39-
url(r'^admin/', admin.site.urls),
39+
path('admin/', admin.site.urls),
4040
```
4141

4242
장고는 `admin/`로 시작하는 모든 URL을 *view*와 대조해 찾아냅니다. 무수히 많은 URL이 `admin URL`에 포함될 수 있어 일일이 모두 쓸 수 없답니다. 그래서 정규표현식을 사용합니다.
4343

44-
## 정규표현식(Regex)
45-
46-
장고가 URL을 뷰에 매칭시키는 방법이 궁금하죠? 이 부분은 조금 어렵게 느껴질 수 있어요. 장고는 `regex`를 사용하는데, 이는 `정규표현식(regular expressions)`의 줄임말입니다. 정규식은 정말 (아주!) 많은 검색 패턴의 규칙을 가지고 있어요. 정규식은 어려운 내용이라 자세하게 알아보지 않을 거에요.
47-
48-
URL패턴 만드는 방법이 궁금하다면, 다음 표기법을 확인하세요. 이 중 몇 가지 규칙만 사용할 거에요.
49-
50-
* ^ : 문자열이 시작할 떄
51-
* $ : 문자열이 끝날 때
52-
* \d : 숫자
53-
* + : 바로 앞에 나오는 항목이 계속 나올 때
54-
* () : 패턴의 부분을 저장할 때
55-
56-
이외에도 문자열을 이용해 url을 만들 수 있어요.
57-
58-
`http://www.mysite.com/post/12345/`라는 사이트가 있다고 합시다. 여기에서 `12345`는 글 번호를 의미합니다.
59-
60-
뷰마다 모든 글 번호을 일일이 매기는 것은 정말 힘들죠. 정규표현식으로 url패턴을 만들어 숫자값과 매칭되게 할 수 있어요. 이렇게 말이죠. `^post/(\d+)/$`. 어떤 뜻인지 하나씩 살펴봅시다.
61-
62-
* **^post/** : url이(오른쪽부터) `post/`로 시작합니다.
63-
* **(\d+)** : 숫자(한 개 이상)가 있습니다. 이 숫자로 조회하고 싶은 게시글을 찾을 수 있어요.
64-
* **/** : `/`뒤에 문자가 있습니다.
65-
* **$** : url 마지막이 `/`로 끝납니다.
66-
6744
## 나의 첫 번째 Django url!
6845

69-
첫 번째 URL을 만들어 봅시다! 우리는 '<http://127.0.0.1:8000/>'가 홈페이지 주소로 만들어 글 목록이 보이게 만들어 볼 거에요.
46+
첫 번째 URL을 만들어 봅시다! 'http://127.0.0.1:8000/' 주소를 블로그 홈 페이지로 지정하고 여기에 글 목록을 보여줄 거에요.
7047

7148
또한 `mysite/urls.py`파일을 깨끗한 상태로 유지하기 위해, `blog` 애플리케이션에서 메인 `mysite/urls.py`파일로 url들을 가져올 거에요.
7249

73-
먼저 `#`로 시작하는 줄을 삭제하고 `main url('')``blog.urls`가져오는 행을 추가해 봅시다.
50+
먼저 `blog.urls`를 가져오는 행을 추가해 봅시다. `blog.urls`가져오려면, `include` 함수가 필요합니다. `from django.urls ` 행을 찾아 `import` 뒤에 `include` 함수를 추가하세요.
7451

7552
이제 `mysite/urls.py` 파일은 아래처럼 보일 거에요.
7653

7754
{% filename %}mysite/urls.py{% endfilename %}
7855
```python
79-
from django.conf.urls import include, url
8056
from django.contrib import admin
57+
from django.urls import path, include
8158

8259
urlpatterns = [
83-
url(r'^admin/', admin.site.urls),
84-
url(r'', include('blog.urls')),
60+
path('admin/', admin.site.urls),
61+
path('', include('blog.urls')),
8562
]
8663
```
8764

8865
지금 장고는 http://127.0.0.1:8000/ 로 들어오는 모든 접속 요청을 `blog.urls`로 전송해 추가 명령을 찾을 거예요.
8966

90-
파이썬에서 정규 표현식을 작성할 때는 항상 문자열 앞에 `r`을 붙입니다. 이는 파이썬에게는 별 의미가 없지만, 파이썬에게 문자열에 특수 문자를 있다는 것을 알려줍니다.
91-
9267
## blog.urls
9368

9469
`blog/urls.py`이라는 새 파일을 생성하세요. 좋아요! 이제 아래 두 줄을 추가하세요.
9570

9671
{% filename %}blog/urls.py{% endfilename %}
9772
```python
98-
from django.conf.urls import url
73+
from django.urls import path
9974
from . import views
10075
```
10176

102-
우리는 장고의 메소드와 `blog` 애플리케이션에서 사용할 모든 `views`불러오고 있어요. (물론 아직 뷰를 하나도 안 만들었지만, 곧 만들거니 조금만 기다리세요!)
77+
여기서 장고 함수인 `path``blog` 애플리케이션에서 사용할 모든 `views`가져왔어요. (물론 아직 뷰를 만들기 전이지만 일 분 내로 만들거에요!)
10378

10479
그 다음, 첫 번째 URL 패턴을 추가하세요.
10580

10681
{% filename %}blog/urls.py{% endfilename %}
10782
```python
10883
urlpatterns = [
109-
url(r'^$', views.post_list, name='post_list'),
84+
path('', views.post_list, name='post_list'),
11085
]
11186
```
11287

113-
이제 `post_list`라는 이름의 `view``^$` URL에 할당되었습니다. 이 정규표현식은 `^`에서 시작해 `$`로 끝나는 지를 매칭할 것입니다. 즉 문자열이 아무것도 없는 경우만 매칭하겠죠. 틀린 것이 아니에요. 왜냐하면 장고 URL 확인자(resolver)는 '<http://127.0.0.1:8000/>' 는 URL의 일부가 아니기 때문입니다. 이 패턴은 장고에게 누군가 웹사이트에 '<http://127.0.0.1:8000/>' 주소로 들어왔을 때 `views.post_list`를 보여주라고 말할 거에요.
88+
이제 `post_list`라는 `view`루트 URL에 할당되었습니다. 이 URL 패턴은 빈 문자열에 매칭이 되며, 장고 URL 확인자(resolver)는 전체 URL 경로에서 접두어(prefix)에 포함되는 도메인 이름(i.e. http://127.0.0.1:8000/)을 무시하고 받아들입니다. 이 패턴은 장고에게 누군가 웹사이트에 'http://127.0.0.1:8000/' 주소로 들어왔을 때 `views.post_list`를 보여주라고 말해줍니다.
11489

11590
마지막 부분인 `name='post_list'`는 URL에 이름을 붙인 것으로 뷰를 식별합니다. 뷰의 이름과 같을 수도 완전히 다를 수도 있습니다. 이름을 붙인 URL은 프로젝트의 후반에 사용할 거예요. 그러니 앱의 각 URL마다 이름 짓는 것은 중요합니다. URL에 고유한 이름을 붙여, 외우고 부르기 쉽게 만들어야 해요.
11691

11792
http://127.0.0.1:8000/ 접속했는데 '웹 페이지를 사용할 수 없음(web page not available)'이라는 메시지가 표시되었나요?. 이는 서버(`runserver`라고 입력하는 것을 기억 하는가?)가 실행되지 않았기 때문이에요. 에러가 발생한 이유를 찾으려면 서버 콘솔 창을 보세요.
11893
![Error](images/error1.png)
11994

120-
콘솔에서 에러가 발생했네요. 하지만 걱정하지 마세요. 에러는 해결할 방법을 알려준답니다. :   __no attribute 'post_list'__ 라는 메시지가 보일 텐데요. 이것은 장고가 찾고 사용하려고하는 **아직 없다는 거에요. 이 단계에서 `/admin/`로도 접속되지 않을 거에요. 앞으로 고쳐볼 테니 걱정하지 마세요.
95+
콘솔에서 에러가 발생했네요. 하지만 걱정하지 마세요. 에러는 해결할 방법을 알려준답니다. : **no attribute 'post_list'** 라는 메시지가 보일거에요. 이 메시지는 장고가 찾고 사용하고자 하는 _뷰_가 아직 없다는 거에요. 이 단계에서 `/admin/` 접속되지 않을 거에요. 앞으로 고쳐볼 테니 걱정하지 마세요. 혹시 여러분이 다른 에러 메시지를 보게 된다면, 웹 서버를 껐다 다시 켜보세요. 커맨드라인(혹은 콘솔)으로 가서 `Ctrl + C`를 눌러 웹 서버를 중단하면 됩니다. 다시 `python manage.py runserver` 명령어를 실행해 서버를 다시 시작하세요.
12196

12297
> 장고 URL 설정에 대해 더 알고 싶다면 장고 공식 문서를 읽어보세요. :
123-
https://docs.djangoproject.com/en/1.11/topics/http/urls/
98+
https://docs.djangoproject.com/en/2.0/topics/http/urls/

ko/django_views/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def post_list(request):
2525
return render(request, 'blog/post_list.html', {})
2626
```
2727

28-
방금 `post_list`라는 함수(`def`) 만들어 `요청(request)`을 넘겨받아 `render`메서드를 호출합니다. 이 함수는 호출하여 받은(return) `blog/post_list.html`템플릿을 보여줍니다.
28+
방금 `post_list`라는 함수(`def`)를 만들었습니다. 이 함수는 `요청(request)`을 넘겨받아 `render`메서드를 호출합니다. 이 함수는 `render` 메서드를 호출하여 받은(return) `blog/post_list.html`템플릿을 보여줍니다.
2929

3030

3131
파일을 저장하고, http://127.0.0.1:8000/ 로 접속해 확인해보세요.
@@ -36,5 +36,5 @@ def post_list(request):
3636

3737
*TemplateDoesNotExist*는 쉽게 해결할 수 있습니다. 잘 따라왔다면 방금 에러가 보이는게 맞아요. 다음 장에서 버그를 해결하기 위해 템플릿 파일을 만들 거에요!
3838

39-
> 장고 뷰에 대해 더 알고 싶다면 장고 공식 문서를 읽어보세요. : https://docs.djangoproject.com/en/1.11/topics/http/views/
39+
> 장고 뷰에 대해 더 알고 싶다면 장고 공식 문서를 읽어보세요. : https://docs.djangoproject.com/en/2.0/topics/http/views/
4040

ko/dynamic_data_in_templates/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,4 @@ def post_list(request):
7575
여기까지에요! 템플릿 파일로 돌아가 쿼리셋을 보이게 만들어 봅시다.
7676

7777
쿼리셋에 대해 더 알고 싶다면 장고 공식 문서를 읽어보세요. :
78-
https://docs.djangoproject.com/en/1.8/ref/models/querysets/
78+
https://docs.djangoproject.com/en/2.0/ref/models/querysets/

0 commit comments

Comments
 (0)