바뀜

둘러보기로 가기 검색하러 가기
2,337 바이트 추가됨 ,  2021년 9월 23일 (목) 09:34
잔글
110번째 줄: 110번째 줄:  
board/create.html을 만들고 body 안에 다음이 들어가게 한다.<syntaxhighlight lang="html+django">
 
board/create.html을 만들고 body 안에 다음이 들어가게 한다.<syntaxhighlight lang="html+django">
 
<body>
 
<body>
 
+
<!--해당 링크로 보낼거니, action속성은 없어도 된다.-->
 
<form action="{% url 'board:create' %}" method="POST">
 
<form action="{% url 'board:create' %}" method="POST">
 
     {% csrf_token %}
 
     {% csrf_token %}
118번째 줄: 118번째 줄:     
</body>
 
</body>
 +
</syntaxhighlight>action옵션 값을 비워두면 해당 링크로 요청을 보낸다.
 +
 +
<nowiki>{{form}}</nowiki>는 폼으로부터 전달된 객체. 입력을 위한 코드를 자동으로 작성한다.
 +
===에러표시 하기===
 +
적합한 제목형태가 아니거나, 모델에서 제약한 데이터 형식에 맞지 않는 경우 에러가 뜨는데, 어떤 부분에서 에러가 났는지 사용자에게 알려주어야 한다. 탬플릿에 다음과 같이 추가하자.
 +
 +
{% csrf_token %} 태그 아래에 넣으면 적당하다.<syntaxhighlight lang="html">
 +
{% if form.errors %} <!--폼에서 에러가 난 경우-->
 +
    <div class="alert alert-danger" role="alert">
 +
    {% for field in form %}<!--모든 필드를 뒤지며 에러를 찾는다.-->
 +
        {% if field.errors %}
 +
        <strong>{{ field.label }}</strong><!--에러가 난 필드의 라벨에 굵음 처리-->
 +
        {{ field.errors }}<!--어떤 에러인지 보여준다.-->
 +
        {% endif %}
 +
    {% endfor %}
 +
    </div>
 +
{% endif %}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
===폼을 안쓸 때 에러표시하기===
 +
딱히 방법은 없다. view의 context 안에 error_message라고 담아서 보내면 된다.
 +
 +
view에서 발생한 에러는 탬플릿에 <nowiki>{{error_message}}</nowiki> 변수로 전달된다. view에서 발생한 에러메시지를 그대로 보여주는 것이다.
    +
view에서 try-except를 이용하거나 if를 이용해 에러메시지를 보낸다.<syntaxhighlight lang="python">
 +
try:
 +
    어쩌구저쩌구
 +
except(KeyError, 조건):#에러가 나면서 조건을 만족시키면 실행
 +
    context={'error_message':'담을메시지'}
 +
    return render(어쩌구,저쩌구,저쩌구)
 +
else:#에러가 발생하지 않거나 위에 해당하는 에러가 아니면 실행
 +
    명령
 +
</syntaxhighlight>template에선 아래와 같이 사용한다.<syntaxhighlight lang="html">
 +
{% if error_message %} <!-- view에서 에러가 난 경우-->
 +
    <p>{{error_message}}</p><!-- 에러메시지를 보여준다. -->
 +
{% endif %}
 +
</syntaxhighlight>입력값을 저장이 아닌, 그대로 반환하게 하면 form을 사용할 때처럼 페이지가 새로고침 되어도 기존 입력내용들을 보존할 수 있다.
 
== 관련 에러 ==
 
== 관련 에러 ==
    
=== Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at *********>>": "Writing.author" must be a "User" instance. ===
 
=== Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at *********>>": "Writing.author" must be a "User" instance. ===
이 에러는 로그인이 되지 않았을 때 유저객체를 모델에 연결하지 못해 발생하는 에러이다.
+
이 에러는 로그인이 되지 않았을 때 유저객체를 모델에 연결하지 못해 발생하는 에러이다. 글쓰기 전에 로그인을 하게 하는 등의 전략으로 방지할 수 있다.
 
[[분류:장고 기능구현(초급)]]
 
[[분류:장고 기능구현(초급)]]

둘러보기 메뉴