Django Template 작성 + Django HTML 문법 정리

Jwahoon Kim·2021년 7월 6일
0

Django

목록 보기
6/10
  • Django html에서는 html과 조금 다른 문법을 사용할 수 있다.
  • 아래의 post 변수는 view 에서 넘겨준 dict key 값이다.
# /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>
...
  • view 에서 name 속성에 무언가를 지정했다면 아래 코드 두번째 줄과 같이도 href url을 지정해 줄 수 있다. name 속성이 필수는 아니지만 복잡한 url의 경우 간단하게 표현 가능!
{% comment %} index.html {% endcomment %}
...
<a href="/posts/new/">new post<a> {% comment %} 이렇게 하는 대신 {% endcomment %}
<a href="{% url 'new' %}">new post</a> {% comment %} 이렇게 사용 가능 {% endcomment %}
  • but!!!!
    동일한 name의 url이 다른 app에서 존재할 수 있으므로 app_name을 추가하고 href안을 아래와 같이 쓴다면 더욱 명확하게 django에게 알려줄 수 있으니 참고!
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 %}


Django Html - form Tag

 <form action="{% url 'blogPosts:index' %}" method="POST">
# 위의 경로는 action="/posts/"과 같습니다.
      {% csrf_token %} -->> ????
      <p>title</p>
      <input name="title" /> <br />
      <input type="submit" value="submit" />
 </form>

Django html - for & if 문

for 문

<ul>
{% for student in student_list %}
    <li>{{ student.name }}</li>
{% endfor %}
</ul>
student_list에 들어 있는 선수의 목록을 출력하기 위해 위의 예제처럼 사용할 수 있다.

if 문

if / else
변수가 true이면 블록의 컨텐츠를 표시. if 태그 내에 템플릿 필터 및 각종 연산자를 사용할 수 있다.

{% if student_list %}
    총 학생 수 : {{ student_list|length }}
{% else %}
    학생이 없어요!
{% endif %}

csrf_token??

  • CSRF 공격(Cross Site Request Forgery)은 웹 어플리케이션 취약점 중 하나로, 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다.

  • 이를 막기 위해 form 데이터에 csrf_token라는 것을 함께 넣어 보내주는 것입니다. form에 csrf_token이 없을 경우 에러가 발생하므로 꼭 넣어주셔야 합니다.

0개의 댓글