# /blogPosts/templates/blogPosts/index.html
...
<body>
<h1>POSTS</h1>
{% for post in posts %} {% comment %} 이전 view에서 index.html에 모든 포스트를 불러와 'posts'라는 이름으로 전달해주었기 때문에 posts라는 이름으로 사용할 수 있습니다. {% endcomment %}
<div style="border: 1px solid grey;">
# 각 post를 posts/post.id url과 연결하여 보여줌
<a href="/posts/{{ post.id }}/"> {% comment %} 포스트 제목을 누르면 내용을 확인할 수 있도록 링크를 설정해주었습니다. 아직은 확인할 수 없지만 곧 구현할거에요! {% endcomment %}
<h3>{{ post.title }}</h3>
</a>
</div>
{% endfor %} {% comment %} for 문을 end시킨다는 뜻! 템플릿에서는 파이썬 스크립트와 달리 들여쓰기로 구문을 구분할 수 없기 때문에 명시적으로 적어주어야 합니다. {% endcomment %}
</body>
...
{% comment %} index.html {% endcomment %}
...
<a href="/posts/new/">new post<a> {% comment %} 이렇게 하는 대신 {% endcomment %}
<a href="{% url 'new' %}">new post</a> {% comment %} 이렇게 사용 가능 {% endcomment %}
app_name = 'blogPosts' # 추가
urlpatterns = [
...
<a href="{% url 'blogPosts:new' %}">new post</a>
<!-- {% url '앱이름:url이름' %} -->
]
이때 만약 url에 변수가 같이 넘어왔다면 다음과 같이 처리해줄 수 있습니다.
{% url 'blogPosts:show' id=post.id %}
만약 여러 개의 변수가 넘어 왔을 경우 같은 방식으로 쓰되, 스페이스로 변수들을 구분합니다!
{% url 'blogPosts:show' id=post.id cid=comment.id %}
<form action="{% url 'blogPosts:index' %}" method="POST">
# 위의 경로는 action="/posts/"과 같습니다.
{% csrf_token %} -->> ????
<p>title</p>
<input name="title" /> <br />
<input type="submit" value="submit" />
</form>
<ul>
{% for student in student_list %}
<li>{{ student.name }}</li>
{% endfor %}
</ul>
student_list에 들어 있는 선수의 목록을 출력하기 위해 위의 예제처럼 사용할 수 있다.
if / else
변수가 true이면 블록의 컨텐츠를 표시. if 태그 내에 템플릿 필터 및 각종 연산자를 사용할 수 있다.
{% if student_list %}
총 학생 수 : {{ student_list|length }}
{% else %}
학생이 없어요!
{% endif %}
CSRF 공격(Cross Site Request Forgery)은 웹 어플리케이션 취약점 중 하나로, 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다.
이를 막기 위해 form 데이터에 csrf_token라는 것을 함께 넣어 보내주는 것입니다. form에 csrf_token이 없을 경우 에러가 발생하므로 꼭 넣어주셔야 합니다.