目次概要:テンプレート言語テンプレート変数テンプレートタグテンプレートフィルターカスタムフィルター作成概要:テンプレート言語
テンプレートレンダリングこの文は以前の文「パイソンジャンゴ-HTMLテンプレートレンダリング」文と続く文だ。前文に続き、ジャンゴの開発アーキテクチャであるMVTパターンでT(Template)を取り上げ、ジャンゴのテンプレート活用法を見ていく。- MVTパターンについては、前文「パイソンジャンゴ-MVT:URLとビュー、URLパターン」を参考にしよう。テンプレートレンダリングとは、ジャンゴのテンプレートシステムがテンプレートコードを解析してテンプレートファイルを作成する過程である。 結果であるテンプレートファイルはHTML、XML、JSONなどのテキストファイルが該当する。チャンゴとテンプレート(template)HTMLでウェブページを構成すると、少しレイアウトを構成するだけでタグやテキスト内容が長くなる。HTML ファイルを別々に分離しておいて、ビュー関数からレンダリング関数を使用してファイルを読み込むのが一般的である。ジャンゴでテンプレートレンダリング時にdjango.shortcuts.render()関数を使用する。render()関数はパイソンコードとデータをテンプレートファイルにして最終的にブラウザにHTMLに変換してユーザーに見せるようレンダリングする。HTML ファイルを返却してテンプレートと呼ぶが、テンプレート ファイルがHTML ファイルではない。テンプレート言語ブラウザは動的なパイソンスクリプトコードを理解できない。 HTMLファイルにパイソンコードを直接入れることはできないが、ジャンゴ/フラスコでサポートするテンプレート言語を使用すると、パイソンスクリプトをレンダリング過程で静的なHTMLに変え、素早く簡単に動的なウェブサイトを作ることができる。テンプレート言語の種類としては、テンプレート変数とテンプレートタグ、テンプレートフィルターがある。 テンプレート変数は、ビューを通じて伝達した変数をテンプレートの中で扱う機能である。 前の文の最後のパートで扱ったことがある。テンプレートタグはHTMLでパイソンコードを使用できるようにする文法である。テンプレートフィルタは、テンプレート変数にフィルタをかけ、HTML に変換される際に状況に応じて適切に変換できるようにサポートする機能である。Linuxテスト環境の構成、すでに扱ったテンプレート変数を含め、各内容を順に見てみよう。依存性のためにリナックスコンテナ環境に移った状態だ。 ウィンドウ環境と大きくセッティング方法は変わらない。現在のテスト環境は以下の通りである。Linux – ウブント 20.04 in AWSパッケージアップデート及びジャンゴインストール
apt update update install vimapt install python3-pipapt install python3-
アプリとテンプレート設定を修正し、追加でAWS環境で実行するために0.0.0でホスト全体を許可し、AWSのセキュアグループも開いてこそローカルからAWSサーバーにアクセスできます。
config/settings.py 에 왔습니다
config/settings.py 에 왔습니다
ALLOWED_HOSTs = [“0.0.0.0:8080”, “52.79.239.113”]
프로젝트 url 설정 수정 pms 앱 url 설정 파일 생성
cd pmsvim urls.py
cd pmsvim urls.py
from django.urls 가져오기 경로 from.viewurl 패턴 가져오기 = [path(”, views.index)],
전체 호스트를 허용하려면 8080 포트에 pms/views.py 콘텐츠 실행을 허용하려면 8080 포트에 대한 테스트 서버를 생성합니다.다른 설정을 참조하십시오.
python management.pyrunserver 0.0.0:8080python management.pyrunserver 0.0.0:8080템플릿 변수D 장은 기능 및장을 사용하여 템플릿을 반환합니다.지름. shortcuts 템플릿을 반환합니다.렌더링() 기능은 다음과 같습니다.렌더(요청, <template_name>, context= none, context_type= none, 상태= none, = none 사용)요청: 필수 요인 템플릿_name: 템플릿 경로 및 이름은 템플릿 경로를 렌더링하기 위해 사용되는 변수 컨텍스트에 대한 역할: HTML로 전환하지 않습니다.키 및 값 사전의 형태로 포함되어야 합니다.키: Pon 변수 이름 컨텍스트_ 유형: 파이썬 변수 이름 컨텍스트_ 유형을 정의합니다.기본값은 텍스트/hml 상태: HTTP 상태 코드: HTTP 상태 코드를 통과합니다.기본값은 200입니다. 템플릿 엔진 사용을 위한 이름 정의 보기 및 템플릿 엔진 사용에 대한 정의 보기를 쉽게 사용할 수 있습니다.변수 이름이 컨텍스트인지 아니면 사전 형식으로 전달되어야 하지만 사전 형식으로 통과해야 합니다.# django.의 pms/views.py 바로가기 datetime #여기서 뷰 생성.def index(요청) : now_time = datetime.나우() 컨텍스트 = {“now_time” : now_time } 반환 렌더링(요청을 들어 “home/index.html”, 컨텍스트)변수를 사용하는 경우 {{and}}을(를) 랩하여 받은 Python 변수 이름을 표시합니다.<!–pms/templates/home/index.html –><h1><프로젝트 전체 목록입니다.></h1>현재 시간:{now_time}<!–pms/templates/home/index.html –><h1><프로젝트 전체 목록입니다.></h1>현재 시간:{now_time}AWS입니다. 그래서 Linux 서버 시간을 따라 현재 시간이 제대로 나오지 않았습니다.PHT는 KST에서 출력에 설치되었으며 다른 데이터 유형 변수 전송에 추가되었습니다.피프 인스톨 피츠피프 인스톨 피츠# P/views.py에서 p지름 now 더 링 def 에 dat 성 기 = 데이터 시간:%: [M%] – [M%] – [MY] – [시간] – [MYstr 데이터%M:%S) 텍 = {“: 현재_시간”: [Num}: nbsp;L: nm: nm: nbsp; nm: nm: nbsp;정규 문자열만 수신되지 않지만, 데이터 입력 목록이 잘 들어 있습니다.사전에서 특정 값을 추출하면 Pon에서 속성 값을 쿼리할 때 Pon에서 변수 이름을 쿼리할 때 변수 이름을 쿼리 값을 쿼리합니다.키 형식으로 문의하세요.목록에서 인덱스 번호를 입력함으로써 검색됩니다.- 그렇죠 – 기초부터 시작하자(1) 현재 시간:{Num}:{Num}:{Num}:{Num}: <}: {Num}: br {Num}: 0{Num}.}{Num}: {Num}: {Num}: br {Num}: }} 참조하십시오.<!–pms/templates/home/index.html –><h1><프로젝트 전체 목록입니다.><h1>현재 시간:{now_time}}<br>자료수신:<br>{num_list.0}<br>{num_digital}}<br>{num_dict.1}}<br>클래스 개체를 분류하여 분류하여 분류된 함수 클래스 개체를 설정합니다.또한 기능 이름의 형태로 리콜될 수 있다.클래스 사용자: def say_hello(자체): 반환 “hello”클래스 사용자: def say_hello(자체): 반환 “hello””person_obj”: 사용자()} 반환 렌더(요청, “home/index.html”, 컨텍스트)”person_obj”: 사용자()} 반환 렌더(요청, “home/index.html”, 컨텍스트){{ person_obj }}<br>{{person_obj.say_hello}}<br>{{ person_obj }}<br>{{person_obj.say_hello}}<br>템플릿 태그템플릿 태그{# 댓글1 #}다중라인 주석 블록 주석을 사용합니다. {% 댓글과 닫기 전에 {% 엔드 코멘트와 닫힘을 때 “f”과 닫힘을 수 있습니다.{% comment “옵션 노트” %} #댓글 설명 추가(옵션) 이 부분은 렌더링되지 않습니다. {% {% endcomment %}블록 태그 블록 태그 블록 태그는 하위 템플릿으로 정의될 수 있는 블록을 정의합니다.템플릿을 상속하고 하위 템플릿이 상속되는 블록 블록 블록 블록 블록 블록 블록 블록 블록 블록 블록 블록 블록을 정의하고 부모 템플릿에 정의된 템플릿에 대해서만 재정의할 수 있습니다.{% 블록 블록 이름 %}블록 {% endblock %}에서 콘텐츠 사용포인트의 경우 “기본.tml”는 웹 사이트 제목 또는 일반 CSS 또는 JS를 사용하여 상속을 상속해야 하는 표준 프레임워크이다.다음은 기본입니다.ml 파일의 예제입니다.{% 블록 콘텐츠 %} 섹션은 제목, N, N, N, N, N, N, NN, 상속된 템플릿이 포함되어 있습니다.대표적인 예로 “base.html”이 있습니다. base.html은 여러 HTML을 사용하고 웹 사이트 제목이나 공통 CSS 또는 JS와 같은 설정을 가져오는 등 모든 템플릿을 상속해야 하는 표준 프레임워크 문서입니다. 다음은 base.html 파일의 예입니다. {% block content %} 섹션은 모든 페이지에 공통될 제목, CDN, navbar 등을 정의하고 상속받은 템플릿을 포함합니다.상속된 홈. HTML 파일에서는 “기본값.ml” 파일을 상속하고, 익스텐션 태그로 시작합니다.그런 다음 블록에 콘텐츠를 정리하기 위해 아래 블록으로 정리합니다.{% extents ‘base.html’ %}{% block content %}<div> 각 페이지에만 있는 요소입니다.</div>{% endblock %}{% extents ‘base.html’ %}{% block content %}<div> 각 페이지에만 있는 요소입니다.</div>{% endblock %}챕터에서바로 가기를 가져오면 html 기 성 { = {“: 컨텍스트 환 {\0}:410}:60}: (가) μmula_): () int {\400, 403, 403, 404는 다른 클라이언트 오류를 반환했습니다.- {Num} – ==/지수는 {Num}% == {Num}% == 400% {%}이(가) 잘못된 경우) 잘못되었습니다.<!– pms/templates/home/index.html –><h3>{{stat_value}:{{stat_value}:{stat_value == 400%} 잘못된 요청 {% elifstat_value == 403%} 권한 없는 {%elifstat_value == 404%} 알 수 없는 데이터 {% else%} 기타 클라이언트 오류 {%endif%}/h3>가능한 조건 연산자는 ==, =, =, =, ,, ,, in, ,, 그렇지 않습니다.반복 문장, 반 문장을 위한 반복적인 문장 또한 파이썬 문법과 같은 것이다. {% %}에 태그를 사용합니다.마지막으로 진술서를 사용하여 종료할 때, 항상 끝까지 태그를 사용해야 합니다.다음 예에서는 나열된 항목을 출력하는 동안 현재 인덱스를 출력하는 동안 출력합니다.가능한 조건식 연산자는 =, !=, <, >, <=, >==, in, not in, is, not 등이 있습니다. 반복 문장, 문장에 대한 반문은 파이썬 문법과도 같습니다. {%% 태그 사용 %}. if 문을 endif로 사용할 때는 항상 end를 태그하는 것처럼 endfor도 사용해야 합니다. 다음 예제는 나열된 항목을 하나씩 출력하면서 현재 인덱스를 출력합니다.컨텍스트 = {“stat_value”: random.randint(400, 410), user_name: [“user01”, “admin”, “user03”, “asdf”]}{% 목록 %}<p> 순서: {{loop.counter}}<p>{{{항목}}<p>{%end for %}{% 목록 %}<p> 순서: {{loop.counter}}<p>{{{항목}}<p>{%end for %}파이썬에서 루프 개체를 위한 템플릿에 사용할 수 있습니다.예를 들어 사용되는 카운터는 현재 반복 순서와 카운터 0에서 표시됩니다.루프 속성 설명 표시는 루프에 대한 첫 번째 루프가 0에서 0에서 0에서 0에서 0에서 0에서 0에서 0에서 0에서 0에서 순서대로 정렬됩니다.루프쇼프의 마지막 루프에 대한 진정한 루프에 대한 진정한 루프에 대한 진정한 루프에 대한 실제 루프 표시의 0에서 0으로 표시된 루프의 오른쪽 루프 표시로 표시됩니다.상태 상태는 일반적으로 숫자 수직 지점보다 값이 있는지 비교합니다.다음 예에서는 질문_ 목록 변수가 실제인지 여부에 관계없이 반복 진술도 반환하지 않습니다.질문_데이터 = [{“: “사용자_name”: “사용자01”: “사용자01”: “사용자01”: “사용자01”: “안녕하세요.”사용자_name”: “사용자_name”: “사용자_name”: “사용자03”: “사용자03”: “사용자03”: “사용자01H.question_data = [{“id” : “1”, “user_name” : “user01”, “subject” : “안녕하세요. 질문 드려도 될까요?”, {“id” : “2”, “user_name” : “user03”, “subject” : “user01 아, 질문하지 마시고 제목에 넣어주세요” }]{% 질문_d%} =”/또는 최신 %} “/{question.id}:/{/}:/{(}:/{ {{}:{Num}:/{Num}:{Num}:제목:/%}에 대한 {%}/%}의 끝부분의 {%}/%}을 수 있습니다./ %}{% question_date %}<u>{% for question_date %}<li><a href=”/board/{{ question.id }}/””({ question.user_name}}){ question.sub }}</a><li>{% end for %}<u>{% other %}<p>{% endif %} 하위 이 습니다없.<p>{% endif %}변경 태그 단어의 의미에 따라 값이 변경되었는지 확인하는 구문입니다.이 태그와 함께 반복 진술이 반복된 상태에서 값을 변경했는지 확인합니다.이 태그를 사용하여 두 가지 주요 사례가 있습니다.이전 상태에 비해 자체 갱신된 콘텐츠를 확인하고 콘텐츠만 표시하지만 변수가 하나 이상 변경되면 변수가 하나 이상 변경되었는지 확인합니다.다음 예제에서는 값을 변경할 때마다 날짜 또는 날짜 변경 시 날짜 변경 사항을 표시합니다.{% date in days %} {{변경된 경우 %} {{date.date %} {% endiff 변경 된 경우 %} {% endiff %} {{date.hour %}} {% endiff %} {% end for %}HTML 내에서 변수 이름 = ‘값’}의 변수 ‘ ‘값’}에 변수를 선언하고 사용할 수 있습니다.로컬 변수 개념으로, 변수는 구문 내에서 사용할 수 있습니다.다음과 같이 사용되는 경우 우선 순위를 사용하여 로컬_ 값은 랜덤 생성되지 않고 403에서 고정 값을 사용하여 403에서 고정됩니다.{% {% =403%}의 경우 {Num}% {%}%}% {%}%}% {%}%}%}%가(가) 잘못된 경우 {% == {% ==템플릿 필터템플릿 필터 개념 템플릿 필터 개념 템플릿 필터()는 템플릿 변수 값을 변환하여 템플릿 변수 값을 변환하도록 합니다.주로 문자열 또는 목록, 슬라이싱, 슬라이싱, 슬라이싱, 설정, 설정 데이터 형식을 찾을 수 있습니다.플롯의 템플릿 필터와 달리, 마찬가지로 사용자 정의 필터와 마찬가지로 사용자 지정 필터가 생성될 수 있습니다.템플릿 필터 테스트는 메시지 텍스트의 길이를 다음과 같이 표시하지 않고 메시지를 표시할 수 없는 경우 원본 메시지를 표시합니다.{% {% 메시지|length >= 100%} 텍스트가 너무 깁니다. {% endif %}하한 필터를 사용하여 변수 값을 소문자로 바꾸려면 상부 필터를 사용하여 상자로 변경합니다.{{ name|lower}}가입: 옵션” 필터는 분리막에 기초하여 문자열을 결합하기 위해 사용됩니다.{{ user_names|join:”, “}변수 값이 거짓으로 일치하지 않거나 존재하지 않는 경우 기본 값을 반환합니다.{{ value|default:”nothing”}텍스트 변수 사이의 특수 문자를 탈출하여 결과 문자열에 적용할 수 있습니다.{{ {{ 텍스트|줄이 끊어짐}기타 필터 공식 문서 노트 사용자 정의 필터 작성사용자 지정 필터를 생성하고 pms_ 필터에 대한 필터 스크립트를 생성하고 pms_ 필터 스크립트에 필터 스크립트를 생성합니다.등록하면 됩니다.필터 장식기는 템플릿에서 필터 장식된 필터로 사용할 수 있습니다.템플릿 디렉터리에 있지 않으면 settings.py에서 라이브러리 값을 추가해야 합니다.템플릿 = [{ #{ #]옵션: {‘: {\] [#] [#] “#]] “#]}: “todo.my}}}}}}}}.다음 분할 필터는 파이썬에서 문자열() 기능을 사용하여 문자열() 기능을 사용하여 문자열() 기능을 사용하는 필터입니다.# pms/ms_ 필터.p_ 필터.p_ 필터 가져오기 템플릿 등록 = 템플릿을 등록합니다.라이브러리()@@@ 등록합니다.필터(=’ 기본 분할(Key) 기본 분할(Key)# 일 음 없 ‘ ‘) filter value,split)( key# =) 정의).@ 등록하다필터(이름=’ 기본 분할(값, 키: 값: 값: 값: 값).= :: 반환 값: 반환 값 반환 값을 반환합니다.테스트를 위한 데이터로 쉼표로 구분된 문자열을 전달합니다.컨텍스트 = {“user_name”: “user01,admin,user03,asdf”,}HTML 파일에 다음 작성하면 사용자_ 이름 변수를 수신하고 분할 필터를 사용하여 분할 필터를 설정하고, 이 시간마다 반복됩니다.- 그 -p/d.tml – {%}:{%}:{%}:{%}:{%}:{%}:{%}:{%}:{%}:{<!–pms/templates/홈/인덱스.html –>{%load pms_filter %}{{{name}}|split:’,’,’를 태그 %}{{{tag}}{{br>{%end for %}{%end for %}{%end for %}{%end for %}{%end for %}언급.* 이전에 “피스크 진자2 템플릿 엔진과 같은 진자2 템플릿을 사용하여 진자2 템플릿 엔진을 사용하는 방법에 대해 설명합니다.플라스크를 테스트하지만 진자 2 문법 자체가 D장 문법 자체가 비슷하다는 것을 가리킨다.D장오 공식 문서: “내 템플릿 태그 및 필터” – https://docs.djangoproject.com/en/4.2/ref/templates/builtins/ # d #