ジャンゴ - テンプレートの継承

csrf_token

我々はポスト要求の前に提出された場合、setting.pyファイル「django.middleware.csrf.CsrfViewMiddleware」この行でコメントアウトされ、これはフォームとして、フォームデータの提出の時間があり、Djangoはのために、攻撃する悪質な人を防ぎますセキュリティの考慮事項、想像では、独自のDjangoの背景を書き、他の誰かがページを書く人の書き込み攻撃コードがサイトである場合は、学校のサイトをしない場合は、書き込みアドレスでのアクションは、サーバーのアドレスですテストそれが受け取りました。間違って行く可能性があり、それはジャンゴ・デフォルト・スワップポスト要求を拒否します、あなたは、コードの行をコメントアウトしたくない、値がそれに単一のフォームに次のコード行を追加する必要があります

{%csrf_token%}

我々は、Webページのコードを見に行った。この時、何のラインが存在しない場合DjangoはHTMLファイル、HTMLファイルを書き込むために、私たち自身や他の誰かを区別することができるようにあなたは、ページ隠されたinputタグを超えていますがエラーになります

< 入力タイプ= "隠し" = "csrfmiddlewaretoken" = "Faz2aNAt5PaPVW93espQ12sT9DyZtqqIpsSC089vfcdgA072I4dTMbPzsStKxmUB" >

 マザーボード

私たちはHTMLを書くとき、一部のページには、このようなブログの公園として、一般的に同じであり、唯一の第二の部分は他の部分と異なる同じで、今回私たちは、共通のコードを置くことができ、抽出され、我々は通常、母親ますプレートのブロックは、サブページの交換を容易にするために、ページの特定のCSSとJSブロックを定義します。

public_main.html

<!DOCTYPE HTML > 
< HTML LANG = "ZH-CN" > 
< > 
    < メタHTTP-当量= "コンテンツタイプ" コンテンツ= "text / htmlの;のcharset = UTF-8" > 
    < メタのcharset = "UTF-8" > 
    < タイトル>ブートストラップ用ダッシュボードテンプレート</ タイトル> 
    <! - コアCSSブートストラップ- > 
    < リンクのhref = "/静的/ブートストラップ-3.3.7 / CSS / bootstrap.css" のrel = "スタイルシート" >
    = "/静的/ dashboard.css" RELは= "このスタイルシート" > 
</ ヘッド> 

< ボディ> 


  < DIV >      ここで、共通のコードを記述し
        、< DIV >   、コード書き込みが共通あり
            
 
            、{%ブロックmain_pageの%を}   ここで継承することですちょうどmain_page後ろから、コードテンプレートを記述
 
            {%の末端ブロック%} 
        
       </ DIV > 
 </ DIV > 

< スクリプトSRC = "/静的/ jQueryの-3.3.1.js" > </ スクリプト> 
< スクリプトSRC =「/静的/ 3.3.7-のブートストラップ/ JS / bootstrap.js " > </ スクリプト> 
</ボディ> 
</ HTML >

 だから我々は、マスターを作成し、そのマスターはどのようにそれを使用しますか?私たちは、index.htmlをを作成します

{%「はリスト/ public_main.html」拡張   %} 継承マスタ、ノート、使用/前述のリストは、ディレクトリ名である
 
{%}%のブロックmain_page 

      < DIV クラス=「C1」>    、独自のコードを記述するためにここになりますそこマスタコード間のコードの2行に
 
{%の末端ブロック%}

注意:

1.最初の行に書かれたコードを継承しました

2.マスターの名前が引用符で囲む必要があります継承しました

ブロックに書き込まれた前記カスタマイズされたコンテンツ

前記複数のブロックを定義するブロック、一般JSを有する、CSS

 

要約:

継承するマスタ{% 'はxxxx.html' %を拡張します}

マスターを使用することで{% block xxx %}の定義に「ブロック。」

サブページでは、マザーボードに対応するブロック名の内容を定義することで、マザーボードを交換して対応しています。

パッケージ

ナビゲーションバーにはまた、すべてのページではない上に、ブログの庭を見てみましょう、我々はまた、アセンブリで書かれたナビゲーションバーを置くことができ、インポート他のページ、HTMLコードの構成要素であります

いくつかのHTMLコードを書かれているファイルを、作成Xxx.html

そして、マスタまたは他のページへの参照で

{% 'はxxx.html' %を含みます}

ページコンテンツは、必要に応じて使用することができる別のファイルに格納され、その後、構文上記のように導入され、ナビゲーション、フッター情報要素として、使用することができます。

静的関連ファイル

以前、我々はCSSを書いて、JSファイルは、以下のように参照があり、静的なディレクトリに配置されています

<スクリプトSRC = "/静的/ jqueryの -  3.3.1.js"> </ SCRIPT>

静的ファイルの前でsetting.py値であるSTATIC_URL

= STATIC_URL /静的/   プレフィックスを使用して、フォルダ内の静的HTMLファイル

1日、私たちは、このようなstaticfile置き換えとして、STATIC_URLの値を変更する必要がある場合でも、すべての参照を置くために、この時間はstaticfileに変更する必要があります

私たちは、あなたが静的ファイルをどのように変化するかに関係なく、コードの残りの部分を変更しない、静的なファイルを参照するために、{%負荷静的%}を使用することができます

変更されていない初めて目の前に

<! - コアCSSブートストラップ- > 
< リンクのhref = "/静的/ブートストラップ-3.3.7 / CSS / bootstrap.css" のrel = "スタイルシート" > 

<! - 当前页面用到的自定义样式- >
< リンクのhref = "/静的/ dashboard.css" のrel = "スタイルシート" >

< スクリプトSRC = "/静的/ jqueryの- 3.3.1.js" > </ スクリプト> < スクリプトSRC = "/静的/ bootstrap- 3.3.7 / JS / bootstrap.js」> </ スクリプト>

変更後、最初の文字列がDjangoはステッチたちを助ける、/必要はありませんので、我々はちょうどSTATIC_URLの値を変更するには、静的なファイルをインポートするアドレスを変更する必要はありません

<! - コアCSSブートストラップ- > 
< リンクのhref = "{%静的'ブートストラップ3.3.7 / CSS / bootstrap.css' %}" REL = "スタイルシート" > 

<! - 当前页面用到的自定义样式- > < リンクのhref = "{%静的'dashboard.css' %}" REL = "スタイルシート" >

< スクリプトSRC = "{%静的'jqueryの-3.3.1.js' %}" > </ スクリプト> < スクリプトSRC = "{%静的'ブートストラップ3.3.7 / JS / bootstrap.js' %}" > </ スクリプト>

ファイル内で使用された多くは、変数として保存することができます

{%負荷静的%} 
{myphoto%として%静的"画像/ hi.jpg"} 
< IMG SRC = "{{myphoto}}" > </ IMG >
get_static_prefix

 最初のhtmlファイルでは、次の2つのコードを追加するために、何を参照するには

{%負荷静的%} 
{%get_static_prefix%}

開発ツールとの結果を参照してください、

staticfile

結果はSTATIC_URLでsetting.py値であるので、上記のコードは、我々が書くことができ

<! - コアCSSブートストラップ- > 
< リンクのhref = "{%get_static_prefix%}ブートストラップ3.3.7 / CSS / bootstrap.css" REL = "スタイルシート" > 

<! - 当前页面用到的自定义样式- > < リンクのhref = "{%get_static_prefix%} dashboard.css" REL = "スタイルシート" >

< スクリプトSRC = "{%get_static_prefix%}のjQuery-3.3.1.js" > </ スクリプト> < スクリプトSRC = "{%のget_static_prefixの%}ブートストラップ3.3.7 / JS / bootstrap.js" > </ スクリプト>

どちらの方法でも効果は同じである、第一の方法は、Djangoはステッチ私たちを助けるであり、第二は、私たち自身のステッチです

SimpleTagに

そして、同様のカスタムフィルタ、フィルタは、2つのパラメータのみの最大、だけでなく、変数を持つことができます。フィルタは、より柔軟なパラメータを受け入れることができ

ジャンゴインポートテンプレートの

登録 = template.Library()  固定文言、登録インスタンスオブジェクトを生成

(@のregister.simple_tag)を
DEF join_str(* argsを、** kwargsから):
     リターン ' - ' .join(引数)

で、カスタムHTMLに簡単なタグを使用します

%負荷add_strの%} {   <! - templatetags下のパッケージのadd_strのPYファイル名- > 

<! - join_str関数の内部で使用し、パラメータの後ろにある- > < P > {%join_str 'ゾウ' ' } '' IT '= K1'仕事'= K2'ボブ」IS%</ P >

ページ上の結果のような表示は次のとおりです。

< P >ゾウ-ある-IT </ P >

inclusion_tag

復帰のためのいくつかのHTMLスニペット、辞書形式の復帰

templatetagsでファイルを作成しますmy_inclusion.py

ジャンゴインポートテンプレート

レジスタ = template.Library()


@ register.inclusion_tag(' page.html '需要传一个文件名
DEF ページ(合計のcurrent_num):
     リターン { ' ':範囲(1、合計+ 1) 、' のcurrent_num ':のcurrent_num}

page.html

{合計%にnumの%} 
      {%ならNUM ==のcurrent_num%} 
            < リチウムのクラス= "アクティブ" > < HREF = "#" > {{NUM}} </ A > </ > 
      {%他% } < リチウム> < HREF = "#" > {{NUM}} </ A > </ > 
      {%のENDIFの%} 
{%ENDFOR%}
            

htmlページの最後の関数のリファレンス・ページ

{%負荷my_inclusion%}   インポートファイル名PY 
{%ページ6 3%}

コードの説明:

ページ辞書が返され、この機能は、ページ内に導入され、上記の装飾は、パラメータファイル名を必要とし、二つの引数を取る関数を定義して、2つのパラメータを渡す6、aは3でありますこれら2つのパラメータを取得するためのページの後、page.htmlレンダリングを通過しました。範囲内の6ページで、その後、再利用するので、結果はこの判断を行う、1 .... 6です。彼はフィニッシュにレンダリング後のページを返さ

要約:

csrf_token

  フォーム状の1

  2.フォームに隠されたinputタグを追加

  名前csrfmiddlewaretoken

  バルブは、64ビットの文字列をaskjdaskdhashdkasd

 

マスターの継承

  1.一般的なマスターHTMLコードを定義しますbase.html

  2.マスターブロック内のブロックを定義します

  3.サブページは、マスター{%が 'base.html' %を拡張}継承しました

  4.ブロックブロックを書き換えます

  

  注:
    1.最初の行として{「base.html」%}%を拡張

    書き込ま2. {%延び名%}名は、マスターの名前の文字列を継承しました

    ブロックに書き込まれた前記カスタマイズされたコンテンツ

    前記複数のブロックを定義するブロックは、一般に、JS CSSを有します

 

パッケージ

  1.コードを書くnav.html

  2. {% 'はnav.html' %含みます}

 

静的ファイルに関連する
  1荷重静的%{%}

  2. {%静的"相対パス" %} - 'STATIC_URLを取得する設定' /静的/「および相対パススプライシング

  3. {%get_static_prefix%} - " STATIC_URLを取得する設定'/静的/'

  "{%}%get_static_prefix相対パス"

 

カスタムinclusion_tag

  1.アプリのPythonパッケージtemplatetags名で作成しますtemplatetagsは間違っていることはできません

  パッケージ辞myTags 2.書き込みPYファイル

  3.ファイルを編集します

    ジャンゴインポートテンプレートから

    レジスタ= template.Library()


  4.定義関数

    私たちは、パラメータを受け入れて、辞書を返すことができます

  5.関数デコレータを追加します。

    @ register.inclusion_tag( 'page.html')

  6.機能はxxx.htmlをレンダリングするために辞書を返します。

  

 

おすすめ

転載: www.cnblogs.com/zouzou-busy/p/11181623.html