20260513_broker_detail.html

heeyoung_1023·2026년 5월 13일

Bootcamp_Project_4차

목록 보기
1/3

{% extends "base.html" %}

{% block title %}{{ agent.bsnm_cmpnm }} - 상세정보{% endblock %}

{% block content %}

{# JS 가 읽을 설정값 — 인라인 JS 없이 완전 분리 #}

← 목록으로

<div class="rep-image" id="repImageBox">

  {% if images %}

    {% with primary_img=images|dictsort:"is_primary"|last %}
      <img id="repImg"
           src="{% if primary_img %}{{ primary_img.image.url }}{% else %}{{ images.0.image.url }}{% endif %}"
           alt="{{ agent.bsnm_cmpnm }}">
    {% endwith %}

    {% if user.is_authenticated %}
      <div class="img-overlay">
        <button class="overlay-btn" id="btnShowChangePanel">📷 사진 변경</button>
        {% for img in images %}
          {% if img.uploaded_by == user or user.is_staff %}
            <button class="overlay-btn btn-img-delete"
                    data-img-pk="{{ img.pk }}"
                    style="background:rgba(220,38,38,.88);color:#fff;">
              🗑 삭제
            </button>
          {% endif %}
        {% endfor %}
      </div>

      <div class="upload-panel" id="changePanel">
        <button class="panel-close" id="btnCloseChangePanel" type="button"></button>
        <input type="file" id="changeFileInput" accept="image/*" class="d-none">
        <label for="changeFileInput" class="upload-trigger compact">
          <span class="upload-icon">📷</span>
          <span class="upload-text">파일 선택</span>
        </label>
        <p class="file-name-preview" id="changeFileName"></p>
        <input type="text" id="changeCaptionInput"
               placeholder="사진 설명 (선택)"
               class="form-control form-control-sm mt-1 mb-2">
        <button type="button" class="btn btn-primary btn-sm w-100" id="btnSubmitChange">업로드</button>
        <div class="upload-feedback" id="changeFeedback"></div>
      </div>
    {% endif %}

  {% else %}

    {% if user.is_authenticated %}
      <input type="file" id="newFileInput" accept="image/*" class="d-none">
      <label for="newFileInput" class="upload-trigger" id="newUploadTrigger">
        <span class="upload-icon">📷</span>
        <span class="upload-text">사진 추가하기</span>
        <span class="upload-hint">클릭하여 이미지 선택</span>
      </label>
      <div class="upload-panel inline-style" id="newUploadPanel">
        <p class="file-name-preview" id="newFileName"></p>
        <div class="progress-wrap" id="newProgressWrap">
          <div class="progress" style="height:5px;">
            <div id="newProgressBar" class="progress-bar bg-primary" style="width:0%;"></div>
          </div>
          <span id="newProgressText" class="progress-text">0%</span>
        </div>
        <input type="text" id="newCaptionInput"
               placeholder="사진 설명 (선택)"
               class="form-control form-control-sm mb-2">
        <button type="button" class="btn btn-primary btn-sm w-100" id="btnSubmitNew">업로드</button>
        <button type="button" class="btn btn-outline-secondary btn-sm w-100 mt-1" id="btnCancelNew">취소</button>
        <div class="upload-feedback" id="newFeedback"></div>
      </div>
    {% else %}
      <div class="img-placeholder">
        <span class="icon">🏢</span>
        <span>등록된 사진 없음</span>
      </div>
    {% endif %}

  {% endif %}

</div>

<div class="header-right">
  <div class="header-top">
    <span class="broker-name">{{ agent.bsnm_cmpnm }}</span>
    {% if agent.sttus_se_code == "1" %}
      <span class="status-badge open">● 영업중</span>
    {% else %}
      <span class="status-badge closed">폐업</span>
    {% endif %}
  </div>

  <div class="info-grid">
    <div class="info-item">
      <div class="lbl">등록번호</div>
      <div class="val">{{ agent.jurirno|default:"-" }}</div>
    </div>
    <div class="info-item">
      <div class="lbl">대표자</div>
      <div class="val">{{ agent.brkr_nm|default:"-" }}</div>
    </div>
    <div class="info-item">
      <div class="lbl">시군구</div>
      <div class="val">{{ agent.ld_code_nm|default:"-" }}</div>
    </div>
    <hr class="info-divider">
    <div class="info-item full-width">
      <div class="lbl">도로명주소</div>
      <div class="val">{{ agent.rdnmadr|default:"-" }}</div>
    </div>
    <div class="info-item full-width">
      <div class="lbl">지번주소</div>
      <div class="val">{{ agent.mnnmadr|default:"-" }}</div>
    </div>
    <hr class="info-divider">
    <div class="info-item">
      <div class="lbl">등록일</div>
      <div class="val">{{ agent.regist_de|default:"-" }}</div>
    </div>
    <div class="info-item">
      <div class="lbl">영업 시작일</div>
      <div class="val">{{ agent.estbs_begin_de|default:"-" }}</div>
    </div>
    <div class="info-item">
      <div class="lbl">영업 종료일</div>
      <div class="val">{{ agent.estbs_end_de|default:"-" }}</div>
    </div>
  </div>
</div>
{{ avg_score|default:"0" }}
{% for i in "12345" %} {% if forloop.counter <= avg_score %}★{% else %}☆{% endif %} {% endfor %}
리뷰 {{ review_count }}건
{% for item in score_distribution %}
{{ item.score }}점
{{ item.count }}
{% empty %} {% for s in "54321" %}
{{ s }}점
0
{% endfor %} {% endfor %}

{% if user.is_authenticated %}

✏️ 후기 작성하기

{% else %}

🔒 로그인 후 후기 작성 가능

{% endif %}

💬 이용 후기 {{ review_count }}건
{% for review in reviews %}
{{ review.author.username }} {% for i in "12345" %} {% if forloop.counter <= review.score %}★{% else %}☆{% endif %} {% endfor %} {{ review.score }}점
{{ review.created_at|date:"Y.m.d" }}

{{ review.content }}

{% if review.author == request.user %}
수정 삭제
{% endif %}
{% empty %}
💬

아직 등록된 후기가 없습니다

첫 번째 후기를 작성해보세요!

{% endfor %}
{% endblock %}

{% block extra_js %}

{% endblock %}

broker_detail.html에서 {% static 'js/brokers/broker_detail.js' %} 를 사용하고 있는데, 맨 위에 {% load static %} 가 선언되지 않으면 Django 템플릿 엔진이 static 태그를 인식하지 못해서 TemplateSyntaxError가 발생합니다.

현재 파일 상단은 이렇게 시작합니다:

{% extends "base.html" %}

여기에 바로 아래 줄로 추가해야 합니다:

{% extends "base.html" %}
{% load static %}

즉 최종 수정:

{% extends "base.html" %}
{% load static %}

{% block title %}{{ agent.bsnm_cmpnm }} - 상세정보{% endblock %}

발생하는 대표 에러 메시지는 보통 아래 형태입니다:

TemplateSyntaxError: Invalid block tag on line XX: 'static'

원인:

  • {% static %} 사용
  • 하지만 {% load static %} 없음

추가로 이 파일에서는 아래 부분 때문에 반드시 필요합니다:

<script src="{% static 'js/brokers/broker_detail.js' %}"></script>

따라서 핵심 원인은 정확히:

static template tag 미로드 ({% load static %} 누락) 입니다.

profile
개발언어를 배우는 과정 기록

0개의 댓글