我最近开始学习Django(版本1.9),并对templates inheritance提出疑问。
假设我有一个名为mysite
的Django项目和一个名为myapp
的应用程序
我创建了名为base.html
的基本模板和另一个名为child.html
的基础模板,它继承了base.html
。
所以目录结构是这样的:
(project root)
├── mysite
│ ├── settings.py
│ ├── urls.py
│ └── ...
├── myapp
│ ├── models.py
│ ├── views.py
│ ├── ...
│ └── templates
│ └── myapp
│ ├── base.html
│ └── child.html
└── manage.py
在这种情况下,我可以像这样继承base.html
。
<!-- on top of `child.html` -->
{% extends "myapp/base.html" %}
我想知道的是,我正在对应用程序名称进行硬编码 有没有其他的写作方法可以避免硬编码应用程序名称? 或者,它没关系,我不需要担心?
我提出了一些解决方法。
1)将base.html
直接放在templates
目录
├── myapp
│ ├── models.py
│ ├── views.py
│ ├── ...
│ └── templates
│ ├── base.html # Here!
│ └── myapp
│ └── child.html
- &GT;我认为这会导致文件名在应用程序之间崩溃。
2)将base.html
放在项目templates
目录下
- &gt;在这种情况下,我不想在应用程序之间共享base.html
(base.html
此处仅适用于myapp
,而不适用于其他应用程序)
答案 0 :(得分:0)
怎么样
method A
然后使用
|── myapp
│ ├── models.py
│ ├── views.py
│ ├── ...
│ └── templates
│ ├── base.html # Here!
│ └── child.html
│
然后在每个views.py文件的开头动态更改Template目录。
<!-- on top of `child.html` -->
{% extends "base.html" %}
您必须为每个应用做同样的事情。
答案 1 :(得分:0)
您的基本模板和子模板都是特定于您的应用的,因此两者都应位于同一个myapp/
子目录中。在myapp/base.html
上对依赖项进行硬编码是完全可以接受的。