본문 바로가기
728x90

django29

템플릿(HTML) 에서 2차원 배열 출력하기 datas = [] datas.append({"key":"key1", "idx":"0", "title":"title1"}) datas.append({"key":"key2", "idx":"1", "title":"title2"}) 위와 같이 선언된 2차원 배열로 저장된 값을 KEY, VALUE 모두 출력하고 싶을 경우가 있다. 그럴 경우 아래와 같이 코딩한다. {% for row in datas %}    {% for key, value in row.items %}        {{ key }} = {{ value }} ||    {% endfor %}br>br>{% endfor %}  결과값은 아래와 같이 출력된다. [key] = [key1] || [idx] = [0]  || [title] = [title.. 2025. 2. 5.
커스텀 커맨드 만들기 - custom command Django에서는 앱마다 커스텀 커맨드를 만들 수 있다. (아직도 프로젝트, 앱이 헷갈리다 ㅡㅡ;) 간단하게 설명하면 test.py를 콘솔에서 아래와 같이 명령어로 실행시키기 위한 것이다.  . python manage.py test 위와 같이 명령어를 실행하면 test.py에 있는 소스가 실행된다.  이제 만드는 방법에 대해서 알아보자 1. 커스텀 커맨드를 만들 앱을 결정해서 해당 폴더에 아래 구조로 폴더 2개를 생성한다    (앱의 하위폴더에 생성하는게 중요하다) -> /management/commands 2. commands 폴더 밑에 test.py 소스를 작성한다.  (간단하게 메세지를 출력하는 소스이다) from django.core.management.base import BaseCommand.. 2024. 11. 14.
사용자 아이피, agent 가져오기 웹서비스에 접속하는 사용자 아이피를 가져오는 방법이다.  request 를 이용하는 방법으로 HTTP_X_FORWARDED_FOR 값을 체크해서 가져온다.  소스는 아래와 같다.  def getIP(request):     xffInfo = request.META.get('HTTP_X_FORWARDED_FOR')     if xffInfo:         ip = xffInfo.split(',')[0]  #첫 번째를 선택     else:         ip = request.META.get('REMOTE_ADDR')     return ip 함수를 실행하면 사용자의 아이피를 리턴한다. 다음은 사용자의 agent 정보를 가져오는 방법으로 아이피보다 더 간단하다  . user_agent = request... 2024. 10. 16.
한글 로그문제 해결 - django django 에서 로그를 쌓는데 한글이 있을 경우 쌓이지 않는 문제가 발생했다. 테스트 할때는 보통 프로그래머가 그렇듯이 영문으로만 테스트하니 모르고 있었다. ㅡㅡ; 급하게 구글링 결과 encoding을 설정해주면 된다.  settings.py 의 LOGGING.handlers 에서 아래와 같이 추가 'file2': {            'level': 'DEBUG',         'class': 'logging.FileHandler',            'filename': BASE_DIR / f'logs/test.log', 'formatter': 'format_basic',            'encoding' : 'utf-8' }, 2024. 7. 31.
문자열 이스케이프 함수 - django from django.utils.html import escape ​unsafe_string = '' safe_string = escape(unsafe_string) ​print(safe_string) 2024. 7. 30.
settings.py 에 선언한 값 가져오기 - django settings.py 에 선언되어 있는 설정 값을 사용하고 싶을 경우 아래와 같이 코딩한다 from config import settings  temp = settings.name //name 으로 선언되어 있는 값을 가져온다 또는 from config import settings temp = getattr(settings, 'name') 2024. 7. 23.
django 내장 템플릿 필터 * add : 변수에 값을 추가함  . {{"2"|add:"3"}} -> 5  . {{"te"|add:"st"}} -> test * addslashes : 따옴표 앞에 슬래시를 추가  . {{ value|addslashes }} * capfirst : 첫번째 문자를 대문자로 바꾼다  . {{ "test"|capfirst }} * center : 주어진 폭의 필드에서 중앙정렬  . {{ value|center:"15" }} * cut : 인수로 주어진 값을 모두 제거  . {{ "test"|cut:"e" }} -> e를 제거해서 tst 출력 * date : 지정된 형식에 따라 날짜 형식을 지정  . {{ value|date:"D d M Y" }} * default : 값이 false 이면 기본값으로 사용 .. 2024. 7. 22.
소스 수정 후 적용방법 - django "장고 + 아파치로 웹서비스 시 소스 변경 후 적용이 안된다면?"​이 문제로 구글링을 계속 해봤지만 누구는 세팅 정보가 아니면 바로 적용된다고 하고​누구는 아파치를 재시작 해야한다고 설명했다. ​직접 테스트를 해본 결과로는 바로 적용이 되었다가 안되었다가 하는데 ​한번 안되면 하루가 지나도 안되고 아파치를 재시작해야만 적용이 되었다. ​느낌 상으로는 수정을 하다가 오류가 발생하면 적용이 막히는 느낌이다. (이것도 모르겠다 ㅜㅜ)​정확한 정답은 아직 모르겠으나 어쨌든, 뭔가를 해줘야 하기는 해야할 것 같은데​서비스를 하고 있는데 소스 변경할 때마다 아파치를 재시작하는건 위험한것 같다. ​그래서, 찾은 다른 방법은 아래와 같다.​ "장고 애플리케이션을 다시 로드한다!!"​1. mod_wsgi 를 사용할 경우.. 2024. 7. 11.
views.py 여러 개 파일로 분리하기 2 - django views.py를 분리하는 2번째 방법은 urls.py에 모두 정의해주는 방법이다. ​일단 첫 번째 방법과 동일하게 views.py를 분리 저장 후 myapp/urls.py 에 아래와 같이 정의해준다​  from .views import a_views, b_views, c_views​  path('', a_views.index, name='index'),  path('/', b_views.detail, name='detail'),  path('/', c_views.detail, name='detail'),​위 와 같이 어떤 뷰를 참조하는지 명시적으로 표시하기 때문에 유지보수 시 유리하다. ​물론, vscode 를 사용할 경우 alt+f12를 이용하면 바로 추적이 가능하기는 하지만....​config/ur.. 2024. 7. 10.
views.py 여러 개 파일로 분리하기 1 - django views.py에 모든 함수를 넣다보면 분리해 줘야하는 시점이 온다. 이럴 경우 아래와 같이 분리를 진행하면된다.  - views 폴더를 생성 - views.py에 있는 함수들을 기능별로 분리해서 신규 생성한 views 폴더에 저장한다 (a_views.py, b_views.py, c_views.py ...)  . 신규 생성한 view 파일들의 import 문은 파일의 위치가 변경되었으므로 수정해줘야한다   예) from .models  -> from ..models - __init__.py 파일을 views 폴더에 생성  . 여러개로 분리한 view 파일들을 모두 import 해준다    from .a_views import *    from .b_views import *    from .c_views.. 2024. 7. 9.
728x90
반응형