使用模板继承创建模块化模板

时间:2014-12-08 19:42:28

标签: python html django

我是Django的新手,我正在练习模板继承。我目前在第3级继承模板时遇到问题。基本级别是我整个站点使用的模板(例如:navbars)。第二级是我网站的内容。但是这个内容有点冗长,所以我拿了一部分(contactform.html)并为该部分创建了自己的HTML文件。

我可以将home.html加入我的index.html,就像这样

{% load staticfiles %}
<!DOCTYPE html>
<html>
<head lang="en">
  <link href="{% static "css/boothie.css" %}" rel="stylesheet" type="text/css">
  <script src="{% static "js/boothie.js" %}"></script>
  <script src="{% static "js/jquery.easing.1.3.js" %}"></script>

  <title>Boothie</title>
</head>
<body>
  {% block content %}{% endblock %}
</body>
</html>

home.html我想要加入contactform.html。这是我到目前为止所做的。

{% extends "index/index.html" %}

{% load staticfiles %}

{% block content %}


   ...
   ...
   ...stuff...

<!-- contact -->

{% block contactform %}{% endblock %}

{% endblock %}

我的contactform.html

{% extends "home/home.html" %}

{% load staticfiles %}

{% block contactform %}

<section id="contact">
   <!-- HTML! -->
</section>

{% endblock %}

这是我家里目前的情况/ views.py:

from django.shortcuts import render
from django.views import generic


class HomeView(generic.TemplateView):
    template_name = "home/home.html"

my home / urls.py:

from django.conf.urls import patterns, url

from home.views import HomeView

urlpatterns = patterns('',
    url(r'^$', HomeView.as_view(), name="home"),
)

TEMPLATE_DIRS:

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
    os.path.join(BASE_DIR, 'home'),
)

这是我的项目结构图:

enter image description here

2 个答案:

答案 0 :(得分:3)

只需在主页模板中包含contactform模板,而不是继承。在home / home.html中:

<section id="contact">
  {% include 'home/contactform.html' %}
</section>

答案 1 :(得分:1)

您不需要extend,而是include

示例,保留contact_form.html的内容仅包含所需的html内容(不包含扩展名,block标记等),然后include the html snippet。现在,django会为你做魔术 - 包含的片段也会包含所有的上下文变量。

{% extends ".." %}

{% load staticfiles %}

{% block content %}


   ...
   ...
   ...stuff...

   {% include /path/to/contactform.html %}

{% endblock %}