21.08.25_Django(with,주석,특수문자,사이트공통양식)

Django

변수명
HTML

django template

탬플릿은 단순 텍스트 언어로 html 작성에 편의성을 제공한다.

{{변수명}} : views 에서 content 로 보내준 dictionary 자료 의 'name' 값을 입력하여 'value' 값을 반환한다.
>>{{변수명|필터명}} : 필터를 사용하여 변수의 표시 형식 변형 가능
	ex) 	
		default : 변수가 비어있는 경우, default 값을 사용
			{{ value|default:"nothing" }}
            		value 가 제공되지 않는다면 nothing을 반환
           	length : 값의 길이를 출력한다.
            		{{ value|length }}
                    	value = ['a','b','c'] 라면 4를 반환

참고블로그


today - online

아... 진짜 열심히 했는데.. 날렸어요 ㅠㅠ.. 지금 12시라서 ... 다시 작성하기엔 너무 늦었고
간단하게 메모만..


오늘 배운 것은 django의 template으로 html을 보다 편하게 사용할 수있다. {% %} 와 같은 표현을 사용하여 python에서 사용하는 함수들 표현 하는게 가능하고

with

    {% with n=111 %}
    	{{n}}
    {% endwith %}
    
위와 같이 사용 할 경우 with 구문 내에서 'n'이라는 변수를 사용 할 수 있다.
endwith이 선언된 외부에서는 'n'이란 변수를 사용할 수는 없다.

with 활용1.

    {% with name=info1.name %}
    이름: {{ name }}<br>
    이름: {{ name }}<br>
    이름: {{ name }}<br>
    {% endwith %}
    이름: {{ name }}<br>
    
위에서는 views에서 작성한 class를 사용한 것이다.
    class Info:
    def __init__(self, name, age): #생성자
        self.name = name
        self.age = age
    
    def __str__(self):
        return "Info[%s, %d]" % (self.name, self.age)
	
현재 views 에서 info1에는 Info('홍길동',20)으로 선언 후 context(딕션) 형식으로
template으로 보내주었다.
{% with name=info1.name %}  : '홍길동' 을 name(변수명)으로 선언
즉, 위의 코드는 이와같이 표현된다.
    이름: 홍길동
    이름: 홍길동
    이름: 홍길동
    이름: 
    
마지막의 '이름: '의 경우 endwith이 선언된 이후에 작성되었기 때문에
{{ name }}에 저장된 값이 없다.
지금 생각해보면 {{name|default:'이름없음'}} 이와 같이 사용했다면 '이름: 이름없음' 이라고 표현할 수 있을것같다.


with 활용2.

    {% with info1.name as name %}
    이름: {{ name }}<br>
    이름: {{ name }}<br>
    이름: {{ name }}<br>
    {% endwith %}
    이름: {{ name }}<br>
    
위의 사용 방식 또한 info1.name의 값을 name(변수명)으로 선언한다.
형태만 다르고 활용1과 같은 역활을 한다.

주석

django template 에서 주석은
    1.
    	{# 템플릿 싱글라인 주석 #}
    
    2.
    	{% comment '설명문자열' %}
        	템플릿
        	멀티
	        라인
            	주석
        {% endcomment %}
    
이처럼 두가지 방식으로 표현 할 수있다.
HTML역시 주석 처리가 가능한데 HTML은
    <!-- 주석 내용 -->
    
으로 주석을 표현할 수 있다.

특수문자

html에서 태그 사용되는 <,>,& 와 같은 특수문자는 화면상으로 표현하기 위해서는
    &lt; : <
    &gt; : >
    &amp; : &
    
이와 같이 표현 할 수 있다. 하지만 이 방법은 특수문자를 일일히 표현하는데 불편하다.
이것을 django의 template에서 autoescape on,off를 사용하여 간단히 표현 할 수 있다.
    	{% autoescape off %}
         {{ value }}
    	{% endautoescape %}
    	
위 코드를 사용 시 화면 상에 간단히
    {{ value }}
    
를 표현 할 수 있다.

사이트 양식 적용

{# 모든 템플릿의 기본 베이스 in 'extemp/base.html' #}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>{% block title %}title{% endblock %}
</head>
<body>
    <div>상단 메뉴
    <a href="{% url 'extemp:index' %}">Home
    <hr>
    <h3>{% block headline %}headline{% endblock %}
    {% block content %}Empty is Content{% endblock %}
    <hr>
    <div>하단공통메뉴
</body>
</html>
위 html 파일을 작성, template에서 base.html 파일을 활용 하는 것으로
사이트의 공통된 양식을 불러올 수 있다.
딩 시 동일한 툴의 사이트를 만들때의 과정을 쉽게 해준다.

{% block title %} 을 사용하여 title 작성 위치를 표현
<body>의 내용은 base.html을 불러오는 모든 화면에서 표현되며
{% block headline %} 을 사용하여 머릿말 내용을 사이트마다 설정 할 수 있고
{% block cotent %} 안에 각 <body>의 내용이 들어가게된다.

해당 사이트의 <body>의 내용이 표현된 후 <div>하단공통메뉴 가 표현된다.
{% extends 'extemp/base.html' %}
{% block title %}ex01{% endblock %}
{% block headline %}예제1{% endblock %}
{% block content %}
n1:{{ n1 }}<br>
lst:{{ lst }}<br>
lst.0:{{ lst.0 }}<br>
lst.1:{{ lst.1 }}<br>
{{ lst.0 }}, {{ lst.1 }}<br>
{{ tup.1 }}, {{ tup.2 }}<br>
{{ dic.a }}, {{ dic.c }}<br>
unknown : [{{ un }}]<br>
{% endblock %}
   
{% extends 'extemp/base.html' %}을 선언하여 base.html을 불러온다.
각각의 block에 필요한 값을 넣어줌으로써 사이트를 표현 할 수 있다.

coment

   으악 ㅠㅠ 다시 정리해서 올렸는데 1시간 이 훌쩍 넘었네요.
   일단 처음에 날린것보다는 디테일이 부족한데 
   한번 정리한걸 다시 작성하니깐 쫌 깔끔하게 쓸 수 었어요.
   
   내일은 django 뿐만아니라 c언어도 정리 할 시간을 챙겨야겠네요.
   

좋은 웹페이지 즐겨찾기