サイトはどうですか

前回の投稿では、新しいサイトビルダーについて説明しました。

今回は、テンプレートシステムの仕組みについて詳しく説明したいと思います。 それは完全にジャンジャンですが、その作り方は特筆に値します。 さらに、Djangoテンプレートエンジンに精通していない読者にも役立ちます。





柔軟性の原則



Biggoのコンストラクターで柔軟性はどのように達成されますか? 例を考えてみましょう。

各コンテンツオブジェクトには独自のURLがあり、要求に応じて、システムは目的のコンテンツを表示します。 URLに加えて、2種類のパターンも定義されています: 外部およびモジュール式 。 外部テンプレートの例:



articles.html

{% extends "base.html" %}



{% block title %}{% if title %}{{ title }}{% else %}{{ block.super }}{% endif %}{% endblock %}



{% block content %}

<div id= "content" class = "box" >



<div class = "content-block box" >

{% BreadCrumbs %}

</div>

{% Articles %} {% CommentsAddForm www2 %}{% Comments www2 %}{% TagsCloud %}

</div>

{% endblock %}





* This source code was highlighted with Source Code Highlighter .








ご覧のとおり、base.htmlを継承し、タイトルとコンテンツブロックをオーバーライドします。

Base.html自体は次のようになります。

< html >

< head >

< meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" >

< link rel ="stylesheet" href ="/css/style.css" type ="text/css" media ="screen" >



< title > {% block title %} {% SiteCaption %} {% endblock %} </ title >

</ head >

< body >

{% block content %}{% endblock %}

</ body >

</ html >




* This source code was highlighted with Source Code Highlighter .








呼び出されたDjangoタグ{%Articles%}、{%CommentsAddForm www2%}、{%Comments www2%}、{%TagsCloud%}に注意してください。 これらは、記事、コメント、およびタグクラウドのモジュールのコンテンツを表します。 タグが呼び出される場所では、指定されたモジュールテンプレートに従って生成されたHTMLコンテンツが表示されます。

以下の記事の1つを例として考えてください。



< div class ="content-block box" >



< h3 >< span > {{ base_obj }} </ span ></ h3 >

{{ base_obj.details }}



{% for obj in lst %}

< dl class ="article box" >

{% if obj.get_image and obj.settings.show_image_on_page %} < dd class ="fl" >

< img src ="{{ obj|make_thumbnail }}" alt ="alt" ></ dd > {% endif %}

< dd class ="dt box" >

< strong class ="font19" >< a href ="{{ obj.get_absolute_url }}" > {{ obj }} </ a ></ strong >

< div class ="font13" > {{ obj.p_details }}{{ obj|obj_info:"html"|truncatewords:"20"}}

< br />< a href ="{{ obj|obj_info:" source_url " }}" > {{ obj|obj_info:"source" }} </ a >

</ div >

< dl class ="artinfo box font13" >

< dd class ="fl" >

{% if obj.p_dateadd %} < b > {{ obj.p_dateadd }} </ b > {% endif %}



</ dd >

< dd class ="fr" >

{{ obj|obj_info:"author" }}



</ dd >

< dd class ="fr tags" >

{% TagsBind obj.get_absolute_url %}

</ dd >

</ dl >

</ dd >

</ dl >

{% endfor %}

{% pagination %}





</ div >




* This source code was highlighted with Source Code Highlighter .








このテンプレートは、呼び出されたタグ{%Articles%}の表示を定義します。 内部には、さらに2つの包含タグの呼び出しがあることに注意してください:{%pagination%}および{%TagsBind%}



再帰呼び出し





一部のタグは、無制限のネストを実装するために自分自身を呼び出します。 例:



< ul class ="menu" >

{% for part in parts %}



< li >< a href ="{{ part.get_url }}" onmouseover ="{{ part.on_mouseover }}" > {{ part }} </ a >

{% for menu_obj in part.menu_set.all %}



{% Menu menu_obj.eng_word %}





{% endfor %}

</ li >

{% endfor %}

</ ul >




* This source code was highlighted with Source Code Highlighter .








{%Menu menu_obj.eng_word%}-対応する名前でサブメニューを呼び出します



テンプレートの継承の詳細。



Base.htmlページ(ベーステンプレート、親):

画像



子テンプレート:

画像



タグURLの依存関係



同じタグ({%Articles%}など)には、URLに応じて異なるコンテンツが表示される場合があります。 これは写真にはっきりと示されています。

画像



PS私たちはハブロフスクの住民のコメントを考慮に入れました。 ポートフォリオを追加し、ドメインと他の小さなものの結合を強調しました。



All Articles