'NoneType' object has no attribute 'strip'
Request Method: | GET |
---|---|
Request URL: | https://blog.noizze.net/blog/158--invader-00 |
Django Version: | 3.2.11 |
Exception Type: | AttributeError |
Exception Value: | 'NoneType' object has no attribute 'strip' |
Exception Location: | /home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/block.py, line 564, in parse |
Python Executable: | /home/opc/blog_noizze/.venv/bin/uwsgi |
Python Version: | 3.9.6 |
Python Path: | ['.', '', '/usr/local/lib/python39.zip', '/usr/local/lib/python3.9', '/usr/local/lib/python3.9/lib-dynload', '/home/opc/blog_noizze/.venv/lib/python3.9/site-packages'] |
Server time: | Thu, 28 Mar 2024 23:46:04 +0900 |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/django/core/handlers/exception.py
, line 47, in inner
response = await sync_to_async(response_for_exception, thread_sensitive=False)(request, exc)
return response
return inner
else:
@wraps(get_response)
def inner(request):
try:
response = get_response(request)…
except Exception as exc:
response = response_for_exception(request, exc)
return response
return inner
Variable | Value |
---|---|
exc | AttributeError("'NoneType' object has no attribute 'strip'") |
get_response | <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7f1832f620d0>> |
request | <WSGIRequest: GET '/blog/158--invader-00'> |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/django/core/handlers/base.py
, line 181, in _get_response
if response is None:
wrapped_callback = self.make_view_atomic(callback)
# If it is an asynchronous view, run it in a subthread.
if asyncio.iscoroutinefunction(wrapped_callback):
wrapped_callback = async_to_sync(wrapped_callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs)…
except Exception as e:
response = self.process_exception_by_middleware(e, request)
if response is None:
raise
# Complain if the view returned None (a common error).
Variable | Value |
---|---|
callback | <function view_post at 0x7f1832c41430> |
callback_args | () |
callback_kwargs | {'post_name': '158--invader-00'} |
middleware_method | <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7f1832fda730>> |
request | <WSGIRequest: GET '/blog/158--invader-00'> |
response | None |
self | <django.core.handlers.wsgi.WSGIHandler object at 0x7f1832f620d0> |
wrapped_callback | <function view_post at 0x7f1832c41430> |
/home/opc/blog_noizze/blog/./blog/views.py
, line 145, in view_post
with open(post_md, encoding='utf-8') as fp:
# print("Reading:", post_md)
md = fp.read()
md = replace_strange_char(md)
md = replace_youtube(md)
func_markdown = marko.Markdown(extensions=['codehilite'])
try:
md = func_markdown(md)…
except ValueError as e:
# error log
print(e)
"""
if 'media_order' in conf:
conf['media_order'] = conf['media_order'].split(',')[0] # show only the first media
Variable | Value |
---|---|
conf | {'date': '15:56 07/30/2011', 'published': True, 'taxonomy': {'category': ['blog'], 'tag': ['cocos2d', 'iOS', 'xcode', 'iPhone', 'invader-project', '게임기획']}, 'title': 'invader - 00 기획'} |
conf_json | '../pages/blog/158--invader-00/conf.json' |
ext | 'svg' |
fp | <_io.TextIOWrapper name='../pages/blog/158--invader-00/post.md' mode='r' encoding='utf-8'> |
func_markdown | <marko.Markdown object at 0x7f1831d83a30> |
md | ('\n' '> 이 예제는 facebook의 [게임/앱 스터디 ' '그룹](http://www.facebook.com/groups/131873050221514/?ap=1) 을 위해 작성 되었습니다.\n' '\n' '교육용 예제로\xa0스패이스 인베이더와 비슷한 게임을 만들어 보기로 하겠습니다.\n' '\n' '### 저작권문제?\n' '\n' '기존에 있는 게임을 소위 말하는 벤치마크 대상으로 했기 때문에(정확히는 베끼는 것을 보고 벤치마크라고 부르는 것이 널리 사용되는게 현실) ' '라이센스 문제를 생각하지 않을 수 없는데, 스패이스인베이더의 저작권은 스퀘어에닉스(TAITO)가 가지고 있고 어페럴 포함 함부로 만들 수 ' '없도록 되어 있습니다. 하지만\xa0여기서는 상용화까지 가지 않을 것이기 그대로 베낀다고 하기 보다는 대강 비슷한 게임을 만드는 것이니 ' '문제는 되지 않을 것이라고 봅니다.\xa0만약 진짜로 무언가를 만든다면 처음 기획 들어가기 전에 아이디어 단계에서 이 문제가 검토가 ' '반드시 되어야 하겠습니다.\n' '\n' '### 게임 구성\n' '* 화면은 포트레이트로\n' '* 10개 씩 5줄의 인베이더가 화면 좌측끝에서 우측끝으로 1줄 내려가서 다시 좌측 끝으로 지그재그로 이동.\xa05줄 인베이더 중에 ' '제일 가장자리 1열 이 없어지면 1캐릭터 길이 만큼 더 움직인다는 것 구현을 고려 해야 . (인베이더를 잡을 수록 움직임이 점점 빨라지는 ' '건 일단 빼기로...)\n' '* 인베이더 중 일부은 시간차를 두고 미사일 투하\n' '* 게임 화면 최하단에 플레이어는 좌우로 이동 미사일 발사\n' '* 발사한 미사일을 인베이더가 맞으면 스코어 +10 해당 인베이더는 화면에서 사라짐\n' '* 플레이어 바로 앞에 방어구조물. 구조물은 한 덩어리가 아니라 2 * 3 블록\n' '* 방어구조물 인베이더, 플레이어가 발사 한 미사일에 맞으면 손상 - 다시 맞으면 파괴\n' '* 파괴 된 구조물은 허공으로 판정\n' '* 인베이더가 전멸하면 게임오버 (다음스테이지는 일단 고려하지 않음)\n' '* 인베이더가 구조물 보다 아래로 내려오거나 플레이어가 미사일에 맞으면 게임오버 (목숨은 1대)\n' '* 화면 제일 위를 가로질러 날라가는 보너스 UFO는 삭제\n' '\n' '### 추가 아이디어\n' '* \xa0fps에서의 스트릭 킬 보너스 같이\xa0탄을 낭비하지 않고 연속으로 격파하면 추가 점수를 주는 요소\n' '\n' '### 개발 프레임워크\n' '\n' '여기 까지 생각 했다면 이제 어떻게 현실화 할 것인가? 라는 문턱을 맞닥들이게 됩니다. 특히 지금 우리처럼 경험이 없다면 가지고 있는 ' '지식(기술)을 어떻게 쓸 수 있는지 얼마나 시간과 노력이 필요한지 가늠하기도 힘들지만 그런 수고를 경험한 선배들이 만들어 놓은 결과를 ' '오픈소스라는 방법으로 공개한 좋은 예가\xa0앵그리버드 등 유명한 게임을 만드는데 사용 된 box2d라는 물리엔진도 포함 되어 있는 등 ' '유용한 프레임웍인 cocos2d 를 소개 합니다.\xa0원래는 python으로 만들어졌던 것이 플레시, iOS(Objective-C)로 ' '포팅 되었습니다. 플레시 게임을 만들던 사람들이 iOS 개발에 많이 전환하게 된 계기가 되기도 했다고 합니다.\n' '\n' '### 디자인\n' '* 인베이더 스프라이트 펼친형태, 움추린형태 2개\n' '* 플레이어 스프라이트 1개\n' '* 플레이어의 미사일 1개, 인베이더의 미사일 1개 - 서로 다른 색으로\n' '* 방어구조물 2*3 = 6개 + 위치별로 손상된 조각 각 1개\n' '* 점수 표시는 내장 폰트 이용\n' '* 폭파되는 그림\n' '* 발사되는 뿅 소리 2가지 하고 폭파되는 펑 소리 1가지\n' '* 사실 초기 단계에서 디자인은 기획과 개발 과정을 명확하게 하는데 아주 중요한 역할을 하기도 하지만\n' '* 프로토타입 형태로 만드는데는 형태, 크기 정도만으로 프로그래밍과 작동 되는 것을 보여 주는 것은 가능 함\n' '* 디자인은 조작 인터페이스 뿐만아니라 사용자 경험에 가장 직접적으로 영향을 줌\n' '* 디자인 결과물은 굳이 판매하지 않더라도 "완성" 단계까지 올려놓는 역할\n') |
post_md | '../pages/blog/158--invader-00/post.md' |
post_name | '158--invader-00' |
request | <WSGIRequest: GET '/blog/158--invader-00'> |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/__init__.py
, line 106, in __call__
self._setup_done = True
def convert(self, text): # type: (str) -> str
"""Parse and render the given text."""
return self.render(self.parse(text))
def __call__(self, text): # type: (str) -> str
return self.convert(text)…
def parse(self, text): # type: (str) -> Document
"""Call ``self.parser.parse(text)``.
Override this to preprocess text or handle parsed result.
"""
Variable | Value |
---|---|
self | <marko.Markdown object at 0x7f1831d83a30> |
text | ('\n' '> 이 예제는 facebook의 [게임/앱 스터디 ' '그룹](http://www.facebook.com/groups/131873050221514/?ap=1) 을 위해 작성 되었습니다.\n' '\n' '교육용 예제로\xa0스패이스 인베이더와 비슷한 게임을 만들어 보기로 하겠습니다.\n' '\n' '### 저작권문제?\n' '\n' '기존에 있는 게임을 소위 말하는 벤치마크 대상으로 했기 때문에(정확히는 베끼는 것을 보고 벤치마크라고 부르는 것이 널리 사용되는게 현실) ' '라이센스 문제를 생각하지 않을 수 없는데, 스패이스인베이더의 저작권은 스퀘어에닉스(TAITO)가 가지고 있고 어페럴 포함 함부로 만들 수 ' '없도록 되어 있습니다. 하지만\xa0여기서는 상용화까지 가지 않을 것이기 그대로 베낀다고 하기 보다는 대강 비슷한 게임을 만드는 것이니 ' '문제는 되지 않을 것이라고 봅니다.\xa0만약 진짜로 무언가를 만든다면 처음 기획 들어가기 전에 아이디어 단계에서 이 문제가 검토가 ' '반드시 되어야 하겠습니다.\n' '\n' '### 게임 구성\n' '* 화면은 포트레이트로\n' '* 10개 씩 5줄의 인베이더가 화면 좌측끝에서 우측끝으로 1줄 내려가서 다시 좌측 끝으로 지그재그로 이동.\xa05줄 인베이더 중에 ' '제일 가장자리 1열 이 없어지면 1캐릭터 길이 만큼 더 움직인다는 것 구현을 고려 해야 . (인베이더를 잡을 수록 움직임이 점점 빨라지는 ' '건 일단 빼기로...)\n' '* 인베이더 중 일부은 시간차를 두고 미사일 투하\n' '* 게임 화면 최하단에 플레이어는 좌우로 이동 미사일 발사\n' '* 발사한 미사일을 인베이더가 맞으면 스코어 +10 해당 인베이더는 화면에서 사라짐\n' '* 플레이어 바로 앞에 방어구조물. 구조물은 한 덩어리가 아니라 2 * 3 블록\n' '* 방어구조물 인베이더, 플레이어가 발사 한 미사일에 맞으면 손상 - 다시 맞으면 파괴\n' '* 파괴 된 구조물은 허공으로 판정\n' '* 인베이더가 전멸하면 게임오버 (다음스테이지는 일단 고려하지 않음)\n' '* 인베이더가 구조물 보다 아래로 내려오거나 플레이어가 미사일에 맞으면 게임오버 (목숨은 1대)\n' '* 화면 제일 위를 가로질러 날라가는 보너스 UFO는 삭제\n' '\n' '### 추가 아이디어\n' '* \xa0fps에서의 스트릭 킬 보너스 같이\xa0탄을 낭비하지 않고 연속으로 격파하면 추가 점수를 주는 요소\n' '\n' '### 개발 프레임워크\n' '\n' '여기 까지 생각 했다면 이제 어떻게 현실화 할 것인가? 라는 문턱을 맞닥들이게 됩니다. 특히 지금 우리처럼 경험이 없다면 가지고 있는 ' '지식(기술)을 어떻게 쓸 수 있는지 얼마나 시간과 노력이 필요한지 가늠하기도 힘들지만 그런 수고를 경험한 선배들이 만들어 놓은 결과를 ' '오픈소스라는 방법으로 공개한 좋은 예가\xa0앵그리버드 등 유명한 게임을 만드는데 사용 된 box2d라는 물리엔진도 포함 되어 있는 등 ' '유용한 프레임웍인 cocos2d 를 소개 합니다.\xa0원래는 python으로 만들어졌던 것이 플레시, iOS(Objective-C)로 ' '포팅 되었습니다. 플레시 게임을 만들던 사람들이 iOS 개발에 많이 전환하게 된 계기가 되기도 했다고 합니다.\n' '\n' '### 디자인\n' '* 인베이더 스프라이트 펼친형태, 움추린형태 2개\n' '* 플레이어 스프라이트 1개\n' '* 플레이어의 미사일 1개, 인베이더의 미사일 1개 - 서로 다른 색으로\n' '* 방어구조물 2*3 = 6개 + 위치별로 손상된 조각 각 1개\n' '* 점수 표시는 내장 폰트 이용\n' '* 폭파되는 그림\n' '* 발사되는 뿅 소리 2가지 하고 폭파되는 펑 소리 1가지\n' '* 사실 초기 단계에서 디자인은 기획과 개발 과정을 명확하게 하는데 아주 중요한 역할을 하기도 하지만\n' '* 프로토타입 형태로 만드는데는 형태, 크기 정도만으로 프로그래밍과 작동 되는 것을 보여 주는 것은 가능 함\n' '* 디자인은 조작 인터페이스 뿐만아니라 사용자 경험에 가장 직접적으로 영향을 줌\n' '* 디자인 결과물은 굳이 판매하지 않더라도 "완성" 단계까지 올려놓는 역할\n') |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/__init__.py
, line 103, in convert
tuple(self._renderer_mixins) + (self._base_renderer,),
{},
)()
self._setup_done = True
def convert(self, text): # type: (str) -> str
"""Parse and render the given text."""
return self.render(self.parse(text))…
def __call__(self, text): # type: (str) -> str
return self.convert(text)
def parse(self, text): # type: (str) -> Document
"""Call ``self.parser.parse(text)``.
Variable | Value |
---|---|
self | <marko.Markdown object at 0x7f1831d83a30> |
text | ('\n' '> 이 예제는 facebook의 [게임/앱 스터디 ' '그룹](http://www.facebook.com/groups/131873050221514/?ap=1) 을 위해 작성 되었습니다.\n' '\n' '교육용 예제로\xa0스패이스 인베이더와 비슷한 게임을 만들어 보기로 하겠습니다.\n' '\n' '### 저작권문제?\n' '\n' '기존에 있는 게임을 소위 말하는 벤치마크 대상으로 했기 때문에(정확히는 베끼는 것을 보고 벤치마크라고 부르는 것이 널리 사용되는게 현실) ' '라이센스 문제를 생각하지 않을 수 없는데, 스패이스인베이더의 저작권은 스퀘어에닉스(TAITO)가 가지고 있고 어페럴 포함 함부로 만들 수 ' '없도록 되어 있습니다. 하지만\xa0여기서는 상용화까지 가지 않을 것이기 그대로 베낀다고 하기 보다는 대강 비슷한 게임을 만드는 것이니 ' '문제는 되지 않을 것이라고 봅니다.\xa0만약 진짜로 무언가를 만든다면 처음 기획 들어가기 전에 아이디어 단계에서 이 문제가 검토가 ' '반드시 되어야 하겠습니다.\n' '\n' '### 게임 구성\n' '* 화면은 포트레이트로\n' '* 10개 씩 5줄의 인베이더가 화면 좌측끝에서 우측끝으로 1줄 내려가서 다시 좌측 끝으로 지그재그로 이동.\xa05줄 인베이더 중에 ' '제일 가장자리 1열 이 없어지면 1캐릭터 길이 만큼 더 움직인다는 것 구현을 고려 해야 . (인베이더를 잡을 수록 움직임이 점점 빨라지는 ' '건 일단 빼기로...)\n' '* 인베이더 중 일부은 시간차를 두고 미사일 투하\n' '* 게임 화면 최하단에 플레이어는 좌우로 이동 미사일 발사\n' '* 발사한 미사일을 인베이더가 맞으면 스코어 +10 해당 인베이더는 화면에서 사라짐\n' '* 플레이어 바로 앞에 방어구조물. 구조물은 한 덩어리가 아니라 2 * 3 블록\n' '* 방어구조물 인베이더, 플레이어가 발사 한 미사일에 맞으면 손상 - 다시 맞으면 파괴\n' '* 파괴 된 구조물은 허공으로 판정\n' '* 인베이더가 전멸하면 게임오버 (다음스테이지는 일단 고려하지 않음)\n' '* 인베이더가 구조물 보다 아래로 내려오거나 플레이어가 미사일에 맞으면 게임오버 (목숨은 1대)\n' '* 화면 제일 위를 가로질러 날라가는 보너스 UFO는 삭제\n' '\n' '### 추가 아이디어\n' '* \xa0fps에서의 스트릭 킬 보너스 같이\xa0탄을 낭비하지 않고 연속으로 격파하면 추가 점수를 주는 요소\n' '\n' '### 개발 프레임워크\n' '\n' '여기 까지 생각 했다면 이제 어떻게 현실화 할 것인가? 라는 문턱을 맞닥들이게 됩니다. 특히 지금 우리처럼 경험이 없다면 가지고 있는 ' '지식(기술)을 어떻게 쓸 수 있는지 얼마나 시간과 노력이 필요한지 가늠하기도 힘들지만 그런 수고를 경험한 선배들이 만들어 놓은 결과를 ' '오픈소스라는 방법으로 공개한 좋은 예가\xa0앵그리버드 등 유명한 게임을 만드는데 사용 된 box2d라는 물리엔진도 포함 되어 있는 등 ' '유용한 프레임웍인 cocos2d 를 소개 합니다.\xa0원래는 python으로 만들어졌던 것이 플레시, iOS(Objective-C)로 ' '포팅 되었습니다. 플레시 게임을 만들던 사람들이 iOS 개발에 많이 전환하게 된 계기가 되기도 했다고 합니다.\n' '\n' '### 디자인\n' '* 인베이더 스프라이트 펼친형태, 움추린형태 2개\n' '* 플레이어 스프라이트 1개\n' '* 플레이어의 미사일 1개, 인베이더의 미사일 1개 - 서로 다른 색으로\n' '* 방어구조물 2*3 = 6개 + 위치별로 손상된 조각 각 1개\n' '* 점수 표시는 내장 폰트 이용\n' '* 폭파되는 그림\n' '* 발사되는 뿅 소리 2가지 하고 폭파되는 펑 소리 1가지\n' '* 사실 초기 단계에서 디자인은 기획과 개발 과정을 명확하게 하는데 아주 중요한 역할을 하기도 하지만\n' '* 프로토타입 형태로 만드는데는 형태, 크기 정도만으로 프로그래밍과 작동 되는 것을 보여 주는 것은 가능 함\n' '* 디자인은 조작 인터페이스 뿐만아니라 사용자 경험에 가장 직접적으로 영향을 줌\n' '* 디자인 결과물은 굳이 판매하지 않더라도 "완성" 단계까지 올려놓는 역할\n') |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/__init__.py
, line 114, in parse
def parse(self, text): # type: (str) -> Document
"""Call ``self.parser.parse(text)``.
Override this to preprocess text or handle parsed result.
"""
self._setup_extensions()
return self.parser.parse(text)…
def render(self, parsed): # type: (Document) -> str
"""Call ``self.renderer.render(text)``.
Override this to handle parsed result.
"""
Variable | Value |
---|---|
self | <marko.Markdown object at 0x7f1831d83a30> |
text | ('\n' '> 이 예제는 facebook의 [게임/앱 스터디 ' '그룹](http://www.facebook.com/groups/131873050221514/?ap=1) 을 위해 작성 되었습니다.\n' '\n' '교육용 예제로\xa0스패이스 인베이더와 비슷한 게임을 만들어 보기로 하겠습니다.\n' '\n' '### 저작권문제?\n' '\n' '기존에 있는 게임을 소위 말하는 벤치마크 대상으로 했기 때문에(정확히는 베끼는 것을 보고 벤치마크라고 부르는 것이 널리 사용되는게 현실) ' '라이센스 문제를 생각하지 않을 수 없는데, 스패이스인베이더의 저작권은 스퀘어에닉스(TAITO)가 가지고 있고 어페럴 포함 함부로 만들 수 ' '없도록 되어 있습니다. 하지만\xa0여기서는 상용화까지 가지 않을 것이기 그대로 베낀다고 하기 보다는 대강 비슷한 게임을 만드는 것이니 ' '문제는 되지 않을 것이라고 봅니다.\xa0만약 진짜로 무언가를 만든다면 처음 기획 들어가기 전에 아이디어 단계에서 이 문제가 검토가 ' '반드시 되어야 하겠습니다.\n' '\n' '### 게임 구성\n' '* 화면은 포트레이트로\n' '* 10개 씩 5줄의 인베이더가 화면 좌측끝에서 우측끝으로 1줄 내려가서 다시 좌측 끝으로 지그재그로 이동.\xa05줄 인베이더 중에 ' '제일 가장자리 1열 이 없어지면 1캐릭터 길이 만큼 더 움직인다는 것 구현을 고려 해야 . (인베이더를 잡을 수록 움직임이 점점 빨라지는 ' '건 일단 빼기로...)\n' '* 인베이더 중 일부은 시간차를 두고 미사일 투하\n' '* 게임 화면 최하단에 플레이어는 좌우로 이동 미사일 발사\n' '* 발사한 미사일을 인베이더가 맞으면 스코어 +10 해당 인베이더는 화면에서 사라짐\n' '* 플레이어 바로 앞에 방어구조물. 구조물은 한 덩어리가 아니라 2 * 3 블록\n' '* 방어구조물 인베이더, 플레이어가 발사 한 미사일에 맞으면 손상 - 다시 맞으면 파괴\n' '* 파괴 된 구조물은 허공으로 판정\n' '* 인베이더가 전멸하면 게임오버 (다음스테이지는 일단 고려하지 않음)\n' '* 인베이더가 구조물 보다 아래로 내려오거나 플레이어가 미사일에 맞으면 게임오버 (목숨은 1대)\n' '* 화면 제일 위를 가로질러 날라가는 보너스 UFO는 삭제\n' '\n' '### 추가 아이디어\n' '* \xa0fps에서의 스트릭 킬 보너스 같이\xa0탄을 낭비하지 않고 연속으로 격파하면 추가 점수를 주는 요소\n' '\n' '### 개발 프레임워크\n' '\n' '여기 까지 생각 했다면 이제 어떻게 현실화 할 것인가? 라는 문턱을 맞닥들이게 됩니다. 특히 지금 우리처럼 경험이 없다면 가지고 있는 ' '지식(기술)을 어떻게 쓸 수 있는지 얼마나 시간과 노력이 필요한지 가늠하기도 힘들지만 그런 수고를 경험한 선배들이 만들어 놓은 결과를 ' '오픈소스라는 방법으로 공개한 좋은 예가\xa0앵그리버드 등 유명한 게임을 만드는데 사용 된 box2d라는 물리엔진도 포함 되어 있는 등 ' '유용한 프레임웍인 cocos2d 를 소개 합니다.\xa0원래는 python으로 만들어졌던 것이 플레시, iOS(Objective-C)로 ' '포팅 되었습니다. 플레시 게임을 만들던 사람들이 iOS 개발에 많이 전환하게 된 계기가 되기도 했다고 합니다.\n' '\n' '### 디자인\n' '* 인베이더 스프라이트 펼친형태, 움추린형태 2개\n' '* 플레이어 스프라이트 1개\n' '* 플레이어의 미사일 1개, 인베이더의 미사일 1개 - 서로 다른 색으로\n' '* 방어구조물 2*3 = 6개 + 위치별로 손상된 조각 각 1개\n' '* 점수 표시는 내장 폰트 이용\n' '* 폭파되는 그림\n' '* 발사되는 뿅 소리 2가지 하고 폭파되는 펑 소리 1가지\n' '* 사실 초기 단계에서 디자인은 기획과 개발 과정을 명확하게 하는데 아주 중요한 역할을 하기도 하지만\n' '* 프로토타입 형태로 만드는데는 형태, 크기 정도만으로 프로그래밍과 작동 되는 것을 보여 주는 것은 가능 함\n' '* 디자인은 조작 인터페이스 뿐만아니라 사용자 경험에 가장 직접적으로 영향을 줌\n' '* 디자인 결과물은 굳이 판매하지 않더라도 "완성" 단계까지 올려놓는 역할\n') |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/parser.py
, line 62, in parse
Based on the type, it will do following:
- text: returns the parsed Document element.
- source: parse the source and returns the parsed children as a list.
"""
if isinstance(source_or_text, str):
block.parser = self # type: ignore
inline.parser = self # type: ignore
return self.block_elements["Document"](source_or_text) # type: ignore…
element_list = self._build_block_element_list()
ast = [] # type: List[block.BlockElement]
assert isinstance(source_or_text, Source)
while not source_or_text.exhausted:
for ele_type in element_list:
if ele_type.match(source_or_text):
Variable | Value |
---|---|
self | <marko.MarkdownParser object at 0x7f1831d83d30> |
source_or_text | ('\n' '> 이 예제는 facebook의 [게임/앱 스터디 ' '그룹](http://www.facebook.com/groups/131873050221514/?ap=1) 을 위해 작성 되었습니다.\n' '\n' '교육용 예제로\xa0스패이스 인베이더와 비슷한 게임을 만들어 보기로 하겠습니다.\n' '\n' '### 저작권문제?\n' '\n' '기존에 있는 게임을 소위 말하는 벤치마크 대상으로 했기 때문에(정확히는 베끼는 것을 보고 벤치마크라고 부르는 것이 널리 사용되는게 현실) ' '라이센스 문제를 생각하지 않을 수 없는데, 스패이스인베이더의 저작권은 스퀘어에닉스(TAITO)가 가지고 있고 어페럴 포함 함부로 만들 수 ' '없도록 되어 있습니다. 하지만\xa0여기서는 상용화까지 가지 않을 것이기 그대로 베낀다고 하기 보다는 대강 비슷한 게임을 만드는 것이니 ' '문제는 되지 않을 것이라고 봅니다.\xa0만약 진짜로 무언가를 만든다면 처음 기획 들어가기 전에 아이디어 단계에서 이 문제가 검토가 ' '반드시 되어야 하겠습니다.\n' '\n' '### 게임 구성\n' '* 화면은 포트레이트로\n' '* 10개 씩 5줄의 인베이더가 화면 좌측끝에서 우측끝으로 1줄 내려가서 다시 좌측 끝으로 지그재그로 이동.\xa05줄 인베이더 중에 ' '제일 가장자리 1열 이 없어지면 1캐릭터 길이 만큼 더 움직인다는 것 구현을 고려 해야 . (인베이더를 잡을 수록 움직임이 점점 빨라지는 ' '건 일단 빼기로...)\n' '* 인베이더 중 일부은 시간차를 두고 미사일 투하\n' '* 게임 화면 최하단에 플레이어는 좌우로 이동 미사일 발사\n' '* 발사한 미사일을 인베이더가 맞으면 스코어 +10 해당 인베이더는 화면에서 사라짐\n' '* 플레이어 바로 앞에 방어구조물. 구조물은 한 덩어리가 아니라 2 * 3 블록\n' '* 방어구조물 인베이더, 플레이어가 발사 한 미사일에 맞으면 손상 - 다시 맞으면 파괴\n' '* 파괴 된 구조물은 허공으로 판정\n' '* 인베이더가 전멸하면 게임오버 (다음스테이지는 일단 고려하지 않음)\n' '* 인베이더가 구조물 보다 아래로 내려오거나 플레이어가 미사일에 맞으면 게임오버 (목숨은 1대)\n' '* 화면 제일 위를 가로질러 날라가는 보너스 UFO는 삭제\n' '\n' '### 추가 아이디어\n' '* \xa0fps에서의 스트릭 킬 보너스 같이\xa0탄을 낭비하지 않고 연속으로 격파하면 추가 점수를 주는 요소\n' '\n' '### 개발 프레임워크\n' '\n' '여기 까지 생각 했다면 이제 어떻게 현실화 할 것인가? 라는 문턱을 맞닥들이게 됩니다. 특히 지금 우리처럼 경험이 없다면 가지고 있는 ' '지식(기술)을 어떻게 쓸 수 있는지 얼마나 시간과 노력이 필요한지 가늠하기도 힘들지만 그런 수고를 경험한 선배들이 만들어 놓은 결과를 ' '오픈소스라는 방법으로 공개한 좋은 예가\xa0앵그리버드 등 유명한 게임을 만드는데 사용 된 box2d라는 물리엔진도 포함 되어 있는 등 ' '유용한 프레임웍인 cocos2d 를 소개 합니다.\xa0원래는 python으로 만들어졌던 것이 플레시, iOS(Objective-C)로 ' '포팅 되었습니다. 플레시 게임을 만들던 사람들이 iOS 개발에 많이 전환하게 된 계기가 되기도 했다고 합니다.\n' '\n' '### 디자인\n' '* 인베이더 스프라이트 펼친형태, 움추린형태 2개\n' '* 플레이어 스프라이트 1개\n' '* 플레이어의 미사일 1개, 인베이더의 미사일 1개 - 서로 다른 색으로\n' '* 방어구조물 2*3 = 6개 + 위치별로 손상된 조각 각 1개\n' '* 점수 표시는 내장 폰트 이용\n' '* 폭파되는 그림\n' '* 발사되는 뿅 소리 2가지 하고 폭파되는 펑 소리 1가지\n' '* 사실 초기 단계에서 디자인은 기획과 개발 과정을 명확하게 하는데 아주 중요한 역할을 하기도 하지만\n' '* 프로토타입 형태로 만드는데는 형태, 크기 정도만으로 프로그래밍과 작동 되는 것을 보여 주는 것은 가능 함\n' '* 디자인은 조작 인터페이스 뿐만아니라 사용자 경험에 가장 직접적으로 영향을 줌\n' '* 디자인 결과물은 굳이 판매하지 않더라도 "완성" 단계까지 올려놓는 역할\n') |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/block.py
, line 90, in __init__
virtual = True
def __init__(self, text): # type: (str) -> None
self.link_ref_defs = {} # type: Dict[str, Tuple[str, str]]
source = Source(text)
inline._root_node = self # type: ignore
with source.under_state(self):
self.children = parser.parse(source) # type: ignore…
self.parse_inline()
class BlankLine(BlockElement):
"""Blank lines"""
Variable | Value |
---|---|
self | <marko.block.Document object at 0x7f1832baf190> |
source | <marko.helpers.Source object at 0x7f1831d83490> |
text | ('\n' '> 이 예제는 facebook의 [게임/앱 스터디 ' '그룹](http://www.facebook.com/groups/131873050221514/?ap=1) 을 위해 작성 되었습니다.\n' '\n' '교육용 예제로\xa0스패이스 인베이더와 비슷한 게임을 만들어 보기로 하겠습니다.\n' '\n' '### 저작권문제?\n' '\n' '기존에 있는 게임을 소위 말하는 벤치마크 대상으로 했기 때문에(정확히는 베끼는 것을 보고 벤치마크라고 부르는 것이 널리 사용되는게 현실) ' '라이센스 문제를 생각하지 않을 수 없는데, 스패이스인베이더의 저작권은 스퀘어에닉스(TAITO)가 가지고 있고 어페럴 포함 함부로 만들 수 ' '없도록 되어 있습니다. 하지만\xa0여기서는 상용화까지 가지 않을 것이기 그대로 베낀다고 하기 보다는 대강 비슷한 게임을 만드는 것이니 ' '문제는 되지 않을 것이라고 봅니다.\xa0만약 진짜로 무언가를 만든다면 처음 기획 들어가기 전에 아이디어 단계에서 이 문제가 검토가 ' '반드시 되어야 하겠습니다.\n' '\n' '### 게임 구성\n' '* 화면은 포트레이트로\n' '* 10개 씩 5줄의 인베이더가 화면 좌측끝에서 우측끝으로 1줄 내려가서 다시 좌측 끝으로 지그재그로 이동.\xa05줄 인베이더 중에 ' '제일 가장자리 1열 이 없어지면 1캐릭터 길이 만큼 더 움직인다는 것 구현을 고려 해야 . (인베이더를 잡을 수록 움직임이 점점 빨라지는 ' '건 일단 빼기로...)\n' '* 인베이더 중 일부은 시간차를 두고 미사일 투하\n' '* 게임 화면 최하단에 플레이어는 좌우로 이동 미사일 발사\n' '* 발사한 미사일을 인베이더가 맞으면 스코어 +10 해당 인베이더는 화면에서 사라짐\n' '* 플레이어 바로 앞에 방어구조물. 구조물은 한 덩어리가 아니라 2 * 3 블록\n' '* 방어구조물 인베이더, 플레이어가 발사 한 미사일에 맞으면 손상 - 다시 맞으면 파괴\n' '* 파괴 된 구조물은 허공으로 판정\n' '* 인베이더가 전멸하면 게임오버 (다음스테이지는 일단 고려하지 않음)\n' '* 인베이더가 구조물 보다 아래로 내려오거나 플레이어가 미사일에 맞으면 게임오버 (목숨은 1대)\n' '* 화면 제일 위를 가로질러 날라가는 보너스 UFO는 삭제\n' '\n' '### 추가 아이디어\n' '* \xa0fps에서의 스트릭 킬 보너스 같이\xa0탄을 낭비하지 않고 연속으로 격파하면 추가 점수를 주는 요소\n' '\n' '### 개발 프레임워크\n' '\n' '여기 까지 생각 했다면 이제 어떻게 현실화 할 것인가? 라는 문턱을 맞닥들이게 됩니다. 특히 지금 우리처럼 경험이 없다면 가지고 있는 ' '지식(기술)을 어떻게 쓸 수 있는지 얼마나 시간과 노력이 필요한지 가늠하기도 힘들지만 그런 수고를 경험한 선배들이 만들어 놓은 결과를 ' '오픈소스라는 방법으로 공개한 좋은 예가\xa0앵그리버드 등 유명한 게임을 만드는데 사용 된 box2d라는 물리엔진도 포함 되어 있는 등 ' '유용한 프레임웍인 cocos2d 를 소개 합니다.\xa0원래는 python으로 만들어졌던 것이 플레시, iOS(Objective-C)로 ' '포팅 되었습니다. 플레시 게임을 만들던 사람들이 iOS 개발에 많이 전환하게 된 계기가 되기도 했다고 합니다.\n' '\n' '### 디자인\n' '* 인베이더 스프라이트 펼친형태, 움추린형태 2개\n' '* 플레이어 스프라이트 1개\n' '* 플레이어의 미사일 1개, 인베이더의 미사일 1개 - 서로 다른 색으로\n' '* 방어구조물 2*3 = 6개 + 위치별로 손상된 조각 각 1개\n' '* 점수 표시는 내장 폰트 이용\n' '* 폭파되는 그림\n' '* 발사되는 뿅 소리 2가지 하고 폭파되는 펑 소리 1가지\n' '* 사실 초기 단계에서 디자인은 기획과 개발 과정을 명확하게 하는데 아주 중요한 역할을 하기도 하지만\n' '* 프로토타입 형태로 만드는데는 형태, 크기 정도만으로 프로그래밍과 작동 되는 것을 보여 주는 것은 가능 함\n' '* 디자인은 조작 인터페이스 뿐만아니라 사용자 경험에 가장 직접적으로 영향을 줌\n' '* 디자인 결과물은 굳이 판매하지 않더라도 "완성" 단계까지 올려놓는 역할\n') |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/parser.py
, line 69, in parse
return self.block_elements["Document"](source_or_text) # type: ignore
element_list = self._build_block_element_list()
ast = [] # type: List[block.BlockElement]
assert isinstance(source_or_text, Source)
while not source_or_text.exhausted:
for ele_type in element_list:
if ele_type.match(source_or_text):
result = ele_type.parse(source_or_text)…
if not hasattr(result, "priority"):
# In some cases ``parse()`` won't return the element, but
# instead some information to create one, which will be passed
# to ``__init__()``.
result = ele_type(result) # type: ignore
ast.append(result)
Variable | Value |
---|---|
ast | [<marko.block.BlankLine object at 0x7f1832baf0a0>, <marko.block.Quote object at 0x7f1832bafb80>, <marko.block.BlankLine object at 0x7f1832bafbe0>, <marko.block.Paragraph object at 0x7f1832baf160>, <marko.block.BlankLine object at 0x7f1832baf1c0>, <marko.block.Heading object at 0x7f1832baff70>, <marko.block.BlankLine object at 0x7f1832baf100>, <marko.block.Paragraph object at 0x7f1832baf040>, <marko.block.BlankLine object at 0x7f1832bafaf0>, <marko.block.Heading object at 0x7f1832baf9d0>, <marko.block.List object at 0x7f1832bafc10>, <marko.block.BlankLine object at 0x7f1832baf5e0>, <marko.block.Heading object at 0x7f1831d833d0>] |
ele_type | <class 'marko.block.List'> |
element_list | [<class 'marko.block.ThematicBreak'>, <class 'marko.block.FencedCode'>, <class 'marko.block.Heading'>, <class 'marko.block.List'>, <class 'marko.block.Quote'>, <class 'marko.block.BlankLine'>, <class 'marko.block.HTMLBlock'>, <class 'marko.block.LinkRefDef'>, <class 'marko.block.CodeBlock'>, <class 'marko.block.Paragraph'>] |
result | <marko.block.Heading object at 0x7f1831d833d0> |
self | <marko.MarkdownParser object at 0x7f1831d83d30> |
source_or_text | <marko.helpers.Source object at 0x7f1831d83490> |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/block.py
, line 471, in parse
state = cls()
children = []
tight = True
has_blank_line = False
with source.under_state(state):
while not source.exhausted:
if parser.block_elements["ListItem"].match(source): # type: ignore
el = parser.block_elements["ListItem"].parse(source) # type: ignore…
if not isinstance(el, BlockElement):
el = parser.block_elements["ListItem"](el) # type: ignore
children.append(el)
source.anchor()
if has_blank_line:
tight = False
Variable | Value |
---|---|
children | [] |
cls | <class 'marko.block.List'> |
has_blank_line | False |
source | <marko.helpers.Source object at 0x7f1831d83490> |
state | <marko.block.List object at 0x7f1831d83550> |
tight | True |
/home/opc/blog_noizze/.venv/lib/python3.9/site-packages/marko/block.py
, line 564, in parse
return True
@classmethod
def parse(cls, source): # type: (Source) -> ListItem
state = cls()
state.children = []
with source.under_state(state):
if not source.next_line().strip(): # type: ignore…
source.consume()
if not source.next_line() or not source.next_line().strip(): # type: ignore
return state
state.children = parser.parse(source) # type: ignore
if isinstance(state.children[-1], BlankLine):
# Remove the last blank line from list item
Variable | Value |
---|---|
cls | <class 'marko.block.ListItem'> |
source | <marko.helpers.Source object at 0x7f1831d83490> |
state | <marko.block.ListItem object at 0x7f1831d83dc0> |
AnonymousUser
No GET data
No POST data
No FILES data
No cookie data
Variable | Value |
---|---|
CONTENT_LENGTH | '' |
CONTENT_TYPE | '' |
DOCUMENT_ROOT | '/usr/share/nginx/html' |
HTTPS | 'on' |
HTTP_ACCEPT | '*/*' |
HTTP_HOST | 'blog.noizze.net' |
HTTP_USER_AGENT | 'claudebot' |
PATH_INFO | '/blog/158--invader-00' |
QUERY_STRING | '' |
REMOTE_ADDR | '174.129.59.198' |
REMOTE_PORT | '39052' |
REQUEST_METHOD | 'GET' |
REQUEST_SCHEME | 'https' |
REQUEST_URI | '/blog/158--invader-00' |
SCRIPT_NAME | '' |
SERVER_NAME | 'blog.noizze.net' |
SERVER_PORT | '443' |
SERVER_PROTOCOL | 'HTTP/1.1' |
uwsgi.node | b'noizze-svc' |
uwsgi.version | b'2.0.20' |
wsgi.errors | <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'> |
wsgi.file_wrapper | <built-in function uwsgi_sendfile> |
wsgi.input | <uwsgi._Input object at 0x7f1831dfae30> |
wsgi.multiprocess | True |
wsgi.multithread | False |
wsgi.run_once | False |
wsgi.url_scheme | 'https' |
wsgi.version | (1, 0) |
blog.settings
Setting | Value |
---|---|
ABSOLUTE_URL_OVERRIDES | {} |
ADMINS | [] |
ALLOWED_HOSTS | ['blog.noizze.net', 'localhost', '127.0.0.1'] |
APPEND_SLASH | False |
AUTHENTICATION_BACKENDS | ['django.contrib.auth.backends.ModelBackend'] |
AUTH_PASSWORD_VALIDATORS | '********************' |
AUTH_USER_MODEL | 'auth.User' |
BASE_DIR | PosixPath('/home/opc/blog_noizze/blog') |
CACHES | {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} |
CACHE_MIDDLEWARE_ALIAS | 'default' |
CACHE_MIDDLEWARE_KEY_PREFIX | '********************' |
CACHE_MIDDLEWARE_SECONDS | 600 |
CSRF_COOKIE_AGE | 31449600 |
CSRF_COOKIE_DOMAIN | None |
CSRF_COOKIE_HTTPONLY | False |
CSRF_COOKIE_NAME | 'csrftoken' |
CSRF_COOKIE_PATH | '/' |
CSRF_COOKIE_SAMESITE | 'Lax' |
CSRF_COOKIE_SECURE | False |
CSRF_FAILURE_VIEW | 'django.views.csrf.csrf_failure' |
CSRF_HEADER_NAME | 'HTTP_X_CSRFTOKEN' |
CSRF_TRUSTED_ORIGINS | [] |
CSRF_USE_SESSIONS | False |
DATABASES | {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.dummy', 'HOST': '', 'NAME': '', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}} |
DATABASE_ROUTERS | [] |
DATA_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
DATA_UPLOAD_MAX_NUMBER_FIELDS | 1000 |
DATETIME_FORMAT | 'N j, Y, P' |
DATETIME_INPUT_FORMATS | ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] |
DATE_FORMAT | 'N j, Y' |
DATE_INPUT_FORMATS | ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] |
DEBUG | True |
DEBUG_PROPAGATE_EXCEPTIONS | False |
DECIMAL_SEPARATOR | '.' |
DEFAULT_AUTO_FIELD | 'django.db.models.BigAutoField' |
DEFAULT_CHARSET | 'utf-8' |
DEFAULT_EXCEPTION_REPORTER | 'django.views.debug.ExceptionReporter' |
DEFAULT_EXCEPTION_REPORTER_FILTER | 'django.views.debug.SafeExceptionReporterFilter' |
DEFAULT_FILE_STORAGE | 'django.core.files.storage.FileSystemStorage' |
DEFAULT_FROM_EMAIL | 'webmaster@localhost' |
DEFAULT_HASHING_ALGORITHM | 'sha256' |
DEFAULT_INDEX_TABLESPACE | '' |
DEFAULT_TABLESPACE | '' |
DISALLOWED_USER_AGENTS | [] |
EMAIL_BACKEND | 'django.core.mail.backends.smtp.EmailBackend' |
EMAIL_HOST | 'localhost' |
EMAIL_HOST_PASSWORD | '********************' |
EMAIL_HOST_USER | '' |
EMAIL_PORT | 25 |
EMAIL_SSL_CERTFILE | None |
EMAIL_SSL_KEYFILE | '********************' |
EMAIL_SUBJECT_PREFIX | '[Django] ' |
EMAIL_TIMEOUT | None |
EMAIL_USE_LOCALTIME | False |
EMAIL_USE_SSL | False |
EMAIL_USE_TLS | False |
FILE_UPLOAD_DIRECTORY_PERMISSIONS | None |
FILE_UPLOAD_HANDLERS | ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] |
FILE_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
FILE_UPLOAD_PERMISSIONS | 420 |
FILE_UPLOAD_TEMP_DIR | None |
FIRST_DAY_OF_WEEK | 0 |
FIXTURE_DIRS | [] |
FORCE_SCRIPT_NAME | None |
FORMAT_MODULE_PATH | None |
FORM_RENDERER | 'django.forms.renderers.DjangoTemplates' |
IGNORABLE_404_URLS | [] |
INSTALLED_APPS | ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles'] |
INTERNAL_IPS | [] |
LANGUAGES | [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] |
LANGUAGES_BIDI | ['he', 'ar', 'ar-dz', 'fa', 'ur'] |
LANGUAGE_CODE | 'ko-kr' |
LANGUAGE_COOKIE_AGE | None |
LANGUAGE_COOKIE_DOMAIN | None |
LANGUAGE_COOKIE_HTTPONLY | False |
LANGUAGE_COOKIE_NAME | 'django_language' |
LANGUAGE_COOKIE_PATH | '/' |
LANGUAGE_COOKIE_SAMESITE | None |
LANGUAGE_COOKIE_SECURE | False |
LOCALE_PATHS | [] |
LOGGING | {} |
LOGGING_CONFIG | 'logging.config.dictConfig' |
LOGIN_REDIRECT_URL | '/accounts/profile/' |
LOGIN_URL | '/accounts/login/' |
LOGOUT_REDIRECT_URL | None |
MANAGERS | [] |
MEDIA_ROOT | '' |
MEDIA_URL | '/' |
MESSAGE_STORAGE | 'django.contrib.messages.storage.fallback.FallbackStorage' |
MIDDLEWARE | ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] |
MIGRATION_MODULES | {} |
MONTH_DAY_FORMAT | 'F j' |
NUMBER_GROUPING | 0 |
PASSWORD_HASHERS | '********************' |
PASSWORD_RESET_TIMEOUT | '********************' |
PASSWORD_RESET_TIMEOUT_DAYS | '********************' |
PREPEND_WWW | False |
ROOT_URLCONF | 'blog.urls' |
SECRET_KEY | '********************' |
SECURE_BROWSER_XSS_FILTER | False |
SECURE_CONTENT_TYPE_NOSNIFF | True |
SECURE_HSTS_INCLUDE_SUBDOMAINS | False |
SECURE_HSTS_PRELOAD | False |
SECURE_HSTS_SECONDS | 0 |
SECURE_PROXY_SSL_HEADER | None |
SECURE_REDIRECT_EXEMPT | [] |
SECURE_REFERRER_POLICY | 'same-origin' |
SECURE_SSL_HOST | None |
SECURE_SSL_REDIRECT | False |
SERVER_EMAIL | 'root@localhost' |
SESSION_CACHE_ALIAS | 'default' |
SESSION_COOKIE_AGE | 1209600 |
SESSION_COOKIE_DOMAIN | None |
SESSION_COOKIE_HTTPONLY | True |
SESSION_COOKIE_NAME | 'sessionid' |
SESSION_COOKIE_PATH | '/' |
SESSION_COOKIE_SAMESITE | 'Lax' |
SESSION_COOKIE_SECURE | False |
SESSION_ENGINE | 'django.contrib.sessions.backends.db' |
SESSION_EXPIRE_AT_BROWSER_CLOSE | False |
SESSION_FILE_PATH | None |
SESSION_SAVE_EVERY_REQUEST | False |
SESSION_SERIALIZER | 'django.contrib.sessions.serializers.JSONSerializer' |
SETTINGS_MODULE | 'blog.settings' |
SHORT_DATETIME_FORMAT | 'm/d/Y P' |
SHORT_DATE_FORMAT | 'm/d/Y' |
SIGNING_BACKEND | 'django.core.signing.TimestampSigner' |
SILENCED_SYSTEM_CHECKS | [] |
STATICFILES_DIRS | ['/home/opc/blog_noizze/blog/static'] |
STATICFILES_FINDERS | ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] |
STATICFILES_STORAGE | 'django.contrib.staticfiles.storage.StaticFilesStorage' |
STATIC_ROOT | None |
STATIC_URL | '/static/' |
TEMPLATES | [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [PosixPath('/home/opc/blog_noizze/blog/templates')], 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}] |
TEST_NON_SERIALIZED_APPS | [] |
TEST_RUNNER | 'django.test.runner.DiscoverRunner' |
THOUSAND_SEPARATOR | ',' |
TIME_FORMAT | 'P' |
TIME_INPUT_FORMATS | ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] |
TIME_ZONE | 'Asia/Seoul' |
USE_I18N | True |
USE_L10N | True |
USE_THOUSAND_SEPARATOR | False |
USE_TZ | True |
USE_X_FORWARDED_HOST | False |
USE_X_FORWARDED_PORT | False |
WSGI_APPLICATION | 'blog.wsgi.application' |
X_FRAME_OPTIONS | 'DENY' |
YEAR_MONTH_FORMAT | 'F Y' |
You’re seeing this error because you have DEBUG = True
in your
Django settings file. Change that to False
, and Django will
display a standard page generated by the handler for this status code.