해결된 질문
작성
·
895
1
답변 2
1
안녕하세요.
템플릿에서 클래스명으로 table table-bordred table-hover 라고 썼는 데,
부트스트랩 스타일이 적용되지 않은 것은 부트스트랩 CSS를 정상적으로 포함되지 않아서입니다.
보여주신 post_list.html 템플릿을 보시면
{% load bootstrap4 %}를 하셨구요. 이는 부트스트랩 버전4를 쓰셨는 데,
그 아래의 부트스트랩 CSS를 보시면 부트스트랩 버전 5를 쓰신 것을 확인하실 수 있습니다.
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
부트스트랩은 최근 버전 5가 출시되었습니다. 그래서 bootstrap cdn 사이트에서도 최근 버전인 5를 안내해주는 듯 하구요.
부트스트랩 버전4과 버전5는 지원하는 클래스명이 변경되었습니다. 부트스트랩 버전을 일치시켜주셔야 여러 기능들이 제대로 동작할 것입니다. 버전5가 아닌 버전4를 포함시켜주세요.
그리고 직접 부트스트랩 포함 태그를 작성하실 수도 있지만, 아래의 템플릿태그도 django-bootstrap4에서 지원을 하니 사용해보세요. js/css 포함 태그를 생성해줍니다.
{% bootstrap_javascript_url %}
{% bootstrap_css_url %}
강의에서는 부트스트랩4 기반으로 진행으로 하시고, 강의 완료 후에 부트스트랩5 기반으로 올려보시면 좋습니다. 얼마 전에 django-bootstrap5 라이브러리가 출시되었거든요.
https://django-bootstrap5.readthedocs.io/
---
그리고, 보여주신 뷰 코드에서 PostListView 클래스기반뷰와 post_list 함수기반뷰의 동작은 동일하지 않습니다. 최소한 템플릿 context data를 처리하는 부분이 다릅니다.
request.GET에서 q를 꺼내서 쿼리셋에 반영하는 부분과 => get_queryset 재정의
q 값을 context_data에 반영하는 부분 => get_context_data 재정의
이 두 가지를 PostListView 클래스에 구현해주셔야 합니다.
---
차근차근 살펴보세요. 또 질문주세요. 화이팅입니다. :-)
0
1)
link href 부분을 bootstrap4 버전으로 낮췄더니 글씨체나 pagination 기능 제대로 돌아오지 않았지만, 테이블 레이아웃 정도는 정상적으로 적용되었습니다. 그런데 이번에는 localhost:8000/instagram 페이지에 접속할 때
TemplateSyntaxError at /instagram/
'bootstrap4' is not a registered tag library. Must be one of:
라는 에러가 발생합니다.
settings.py에는 bootstrap4가 들어가있고, post_list.html의 {% load bootstrap4 %} 부분을 지우고 진행할 때는 다시 해당 에러가 발생하지 않아서 렌더링하는 html의 bootstrap4를 가져올 때 에러가 발생한다고 판단했습니다.
(bootstrap4는 이미 설치했고 settings.py에도 넣어두었고 이전에 html 렌더링이 잘 되는 것을 확인했는데, 갑자기 load할 때 문제가 생긴다는 것은 경로 문제인지 아니면 제가 이것저것 건드리면서 덮어쓰거나 할 때 문제가 생긴건지 확신이 서질 않습니다.)
2)
그래서 bootstrap4를 재설치하려고
pip install bootstrap4
pip install django_forms_bootstrap
pip3 install django-bootstrap4
세 가지 명령어를 통해서 bootstrap4를 다시 설치해주고 진행해도 같은 에러가 발생하는데 추가적으로 확인할만한 사항이 있을까요?
(전체 내용)
TemplateSyntaxError at /instagram/
'bootstrap4' is not a registered tag library. Must be one of: admin_list admin_modify admin_urls cache debugger_tags highlighting i18n indent_text l10n log static syntax_color tz widont
Request Method: | GET |
---|---|
Request URL: | http://localhost:8000/instagram/ |
Django Version: | 4.0.5 |
Exception Type: | TemplateSyntaxError |
Exception Value: | 'bootstrap4' is not a registered tag library. Must be one of: admin_list admin_modify admin_urls cache debugger_tags highlighting i18n indent_text l10n log static syntax_color tz widont |
Exception Location: | C:\Users\ukyanjo\.conda\envs\askcompany\lib\site-packages\django\template\defaulttags.py, line 1029, in find_library |
Python Executable: | C:\Users\ukyanjo\.conda\envs\askcompany\python.exe |
Python Version: | 3.9.12 |
Python Path: | ['C:\\Dev\\askcompany', 'C:\\Users\\ukyanjo\\.conda\\envs\\askcompany\\python39.zip', 'C:\\Users\\ukyanjo\\.conda\\envs\\askcompany\\DLLs', 'C:\\Users\\ukyanjo\\.conda\\envs\\askcompany\\lib', 'C:\\Users\\ukyanjo\\.conda\\envs\\askcompany', 'C:\\Users\\ukyanjo\\AppData\\Roaming\\Python\\Python39\\site-packages', 'C:\\Users\\ukyanjo\\.conda\\envs\\askcompany\\lib\\site-packages', 'C:\\Users\\ukyanjo\\.conda\\envs\\askcompany\\lib\\site-packages\\win32', 'C:\\Users\\ukyanjo\\.conda\\envs\\askcompany\\lib\\site-packages\\win32\\lib', 'C:\\Users\\ukyanjo\\.conda\\envs\\askcompany\\lib\\site-packages\\Pythonwin'] |
Server time: |
Mon, 27 Jun 2022 03:11:58 +0000 |
INSTALLED APPS 리스트의
부분을 지우고 똑같은 문자열을 다시 입력했을 뿐인데 정상적으로 작동했습니다.
->
'최초 INSTALLED APPS에 저장할 때 꼬여서 실제로는 저장되지 않았으나 저에게 보여질 때는 리스트 안에 있는 것 처럼 보여졌음'으로 이해되는데, 컴퓨터의 구조를 몰라서 이런 오류 메커니즘도 가능한지 모르겠네요.
시간 내주셔서 감사합니다.
장고에 포함된 파이썬 소스코드가 수정이 되면, 장고 개발서버가 자동 재시작이 되는 데요. 저장 후에 개발서버 재시작까지 확인해주시면 좋습니다. 재시작이 되었다는 것은 저장이 되었다는 의미니깐요.
"꼬여서 실제로는 저장되지 않았으나" 라는 상황이 어떤 상황일까요? 막연한 설명인데요. 학습을 이어가시며 이러한 설명들을 조금씩 줄여나가시면, 실력향상에 도움이 되실 것입니다.
화이팅입니다. :-)
django-bootstrap4 라이브러리를 설치하셨다면, 아래 공식 저장소의 설치 가이드를 확인해보세요.
https://github.com/zostera/django-bootstrap4#installation
django-bootstrap4도 장고앱 형태로 제공되는 데요. 단순히 pip install 만으로 장고앱을 사용할 수 있는 것은 아닙니다. 사용할 장고앱은 현 프로젝트에 등록하는 과정이 필요합니다.
프로젝트에 등록된 장고앱에 한해서, 그 장고앱 내에 있는 템플릿태그와 모델/템플릿 등을 사용할 수 있게 됩니다. 아래의 에러메세지는 bootstrap4 라는 태그가 있는 장고앱을 찾을 수 없다라고도 이해하실 수 있습니다.
'bootstrap4' is not a registered tag library.
settings.INSTALLED_APPS가 아닌 다른 설정에 'bootstrap4'를 추가하셨을 수도 있고, settings.py 파일을 수정 후에 저장을 하지 않으셨을 수도 있습니다.
그리고, django-bootstrap4 라이브러리는 이 라이브러리 하나만 설치하시면, 강의에서는 충분합니다. 다른 라이브러리를 선택해서 추가로 설치하셨다면, 이에 대한 맥락(context)도 알려주셔야 제가 보다 좋은 답변을 드릴 수 있습니다.