すべてのアプリが利用できるプロジェクトの基本テンプレートを作成できますか? または、アプリごとにベース テンプレートを作成する必要がありますか? そして、それらを同じにしたい場合は、それらをコピーするだけですか?
5 に答える
できますよ。base.html の簡単な例
<!DOCTYPE html>
<html>
<head>
<title>My Project</title>
</head>
<body>
{% block content %}{% endblock content %}
</body>
</html>
そして、view.html ページを持つ myapp というアプリがあるとします。
{% extends "base.html" %}
{% block content %}
<h2>Content for My App</h2>
<p>Stuff etc etc.</p>
{% endblock content %}
詳細については、時間をかけてドキュメントを読んでください
Django バージョン 3 の場合
ここでの回答のいくつかは正しいものですが、ディレクトリ構造内のどこにファイルを配置すればよいかを示していません。ということで、答えを少し説明します。
はい、プロジェクト ディレクトリからファイル{% extends "base.html" %}
を拡張するために使用できます。注意すべき重要なことは、ファイルを配置する場所です。base.html
base.html
- 配列を開い
project_name/project_name/settings.py
て見つけ、に更新しますTEMPLATES
'DIRS' : []
'DIRS': [os.path.join(BASE_DIR, 'templates')]
- という名前のルート レベルにディレクトリを作成します
templates
。このフォルダの場所はproject_name/templates
- すべてのアプリからアクセスするすべてのテンプレートをここに配置し
projects_name/templates
ます。
ファイル:project_name/templates/base.html
project_name/app_name/templates/app_name/template_file.html
を使用して、 にあるアプリケーション固有のテンプレートからこのベース ファイルを拡張します{% extends "base.html" %}
。{% extends "base.html" %} {% block content %} <h2>Content for My App</h2> <p>Stuff etc etc.</p> {% endblock content %}
さらに、 に更新することで、static
テンプレート ディレクトリと同じレベルにプロジェクト全体のディレクトリを作成することもできます。STATICFILES_DIRS
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
project_name/project_name/settings.py
最終的なディレクトリ構造は次のようになります -
project_name/
app_name/
templates/
app_name/
template_file.html
project_name/
settings.py
templates/
base.html
static/
css/
js/
img/
最後の回答にはいくつかの問題があり、これが正しいものです。次のような Base.html が必要です。
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
<title>My Project</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
また、index.html についても
{% extends "appname/base.html" %}
{% block content %}
<h1>test</h1>
{% endblock %}
はい、絶対にできます。extends
Django テンプレートでおよびinclude
テンプレート タグを使用する。
私はDjangoを学び始めており、最近これを理解しました。私のコードはGithubにあります。Django テンプレートをどのように構造化してから継承し、navbar やヘッダー、フッターなどの一般的なものを継承するかに興味がある場合base.html
はinclude
、私のコードをご覧ください。