서버 테스팅을 해보는 와중에 나타난 오류였어요.
장고 서버에서는 문제가 발생하진 않았지만, azure에서는 오류가 발생하더라고요.
오류 문구를 읽어보았을 때 "no such table : articles_article"를 보고, 'migrate가 안 된 건가,,🤔' 했는데 아니더라고요,,
그래서 조장님께 여쭈어보았어요.
게시글이 하나도 없을 때에 예외 처리(오류 처리)를 추가해주는 게 더 안정적인 코드가 될 거라 하시더라고요.
그러시면서 if문을 살짝콩 말씀해주셨어요.
오!!
지금은 for문으로 article_list를 바로 돌리고 있잖아요? 이거를 if문으로 감싸줄게요.
{% if article_list %} <!--게시글이 있다면-->
{% for article in article_list %}
....
<!--article_list에 아무런 값도 없을 시-->
{% else %}
<div class="col-md-4">
<p>No article.</p>
</div>
{% endif %}
코드를 if문으로 감싸주었어요.
article_list에 아무런 값도 없을 시에는 "No article"이라는 문구를 띄우게 보충하였어요.
Image 로직
{% for article in article_list %}
<div class="col-md-4">
<div class="card">
<a style="color: black;" href="{% url 'articles:articledetail' article.pk %}">
<!--이미지 관련 로직-->
<div class="card-img-top">
{% if article.image %}
<img src="{{ article.image.url }}" class="fas fa-image fa-5x" style="max-width: 100%; max-height: 100%; object-fit: contain;"></img>
{% else %}
No Image
{% endif %}
</div>
이미지에도 if문으로 안정성을 높였어요.
else 부분을 추가해서 이미지가 없으면, No Image가 보이도록 했어요.
좋아요, 싫어요 버튼 로직
<!--게시글 목록에 표시될 로직-->
<div>
<!--좋아요 버튼과 개수-->
<form method="post" action="{% url "articles:articlelike" article.pk "❤️" %}" style="display: inline-block; margin-right: 15px;">
{% csrf_token %}
<button type="submit" class="btn btn-outline-light">❤️</button>
<p class="card-text" style="display: inline-block;"><strong>{{ article.like_count }}</strong></p>
</form>
<!--싫어요 버튼과 개수-->
<form method="post" action="{% url "articles:articlelike" article.pk "🤨" %}" style="display: inline-block; margin-right: 10px;">
{% csrf_token %}
<button type="submit" class="btn btn-outline-light">🤨</button>
<p class="card-text" style="display: inline-block;"><strong>{{ article.dislike_count }}</strong></p>
</form>
</div>
제가 쓴 코드이지만 너무 안 읽히더라고요.
div가 새로 시작될 때마다 주석으로 설명을 넣어주었어요.
작성자 ID, Job ID 로직
<!--게시글 목록에 표시될 작성자 ID와 Job ID-->
<div class="card-body">
<p class="card-content">
User ID : {{ article.user_id }}<br>
Job ID : {{ article.job_id}}
</p>
</div>
core/settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
메인 앱에 있는 settings.py에 데이터 베이스의 링크를 수정하였어요.
"NAME": os.path.join(BASE_DIR, 'db.sqlite3'), os를 통해서 가져오도록 설정했어요.
에..? 해결 안 됐어요 🤔
views.py 로직도 확인해야겠어요.
"Raised during: "articles.views.ArticleList"가 적혀있더라고요.
articles 앱에 있는 views.py에, ArticleList view에서 오류 처리를 추가해야겠어요.
AritcleList view
# articles views.py
# 게시글 목록 보기
class ArticleList(View):
def get(self, request):
article_list = Article.objects.all()
context = {"article_list":article_list}
return render(request, "main.html", context)
수정하기 전의 ArticleList view예요.
오류 처리를 하나도 안 해놓고 있었네요 ㅎㅎ;
수정한 AritcleList view
# articles views.py
# 게시글 목록 보기
class ArticleList(View):
def get(self, request):
try:
article_list = Article.objects.all()
if not article_list.exists():
article_list = None
except DatabaseError as db_err:
print(f"Database error occurred: {db_err}")
article_list = None # 데이터베이스 오류 시 None 설정
except Exception as e:
print(f"Unexpected error occurred: {e}")
article_list = None # 기타 예외 발생 시 None 설정
context = {"article_list": article_list}
return render(request, "main.html", context)
try, except로 처리해주었어요.
try: article_list = Article.objects.all() if not article_list.exists(): article_list = None
만약 Article 모델에서 정해진 칼럼 내에서, article_list가 존재하지 않는 거라면 None을 출력하도록 했어요.
<Data Base Error>except DatabaseError as db_err: print(f"Database error occurred: {db_err}") article_list = None # 데이터베이스 오류 시 None 설정
<그 외, Exception>except Exception as e: print(f"Unexpected error occurred: {e}") article_list = None # 기타 예외 발생 시 None 설정
azure로 배포를 했고, azure에서 확인을 했어요.
장고 서버에서는 문제 없었지만, azure에서는 문제가 있었으니까요,,
그래도! 이제 게시글 목록 관련해서는 문제가 해결되었어요.
'👥 최종 팀 프로젝트(250227~250331) > 트러블 슈팅 🤯' 카테고리의 다른 글
[🤯Front-end] Footer 버그 수정 (0) | 2025.03.07 |
---|---|
[🤯Back-end] 배포할 거면 Django에 허용된 출처(trusted origins)에 등록하자. (0) | 2025.03.06 |
[🤯Back-end] media을 사용하려면 경로를 통일시키자. (0) | 2025.03.06 |
[🤯Front-end] Back-end 로직이 돼야, Front로 의미가 있다. (0) | 2025.03.03 |
[🤯Meshy] 프롬프트 문제인 줄 알았으나, 웹 사이트 사용의 미숙함이었다. (0) | 2025.02.27 |