서버 테스팅을 해보는 와중에 나타난 오류였어요.

장고 서버에서는 문제가 발생하진 않았지만, 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에서는 문제가 있었으니까요,,

그래도! 이제 게시글 목록 관련해서는 문제가 해결되었어요.

🐾Recent posts