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をレンダリングするために辞書を返します。