如何在除base.html之外的每个页面中包含代码块

时间:2014-11-04 17:57:35

标签: python django forms smarty

我需要创建一个带有表单的小边块(它只包含一个字段和按钮),我希望它包含在除base.html之外的每个页面中

我考虑过制作简单的视图功能,但也许有更好的方法可以做到这一点?

我正在使用Python和Django 1.6

3 个答案:

答案 0 :(得分:1)

您必须使用模板才能执行此操作。 换句话说,尝试使用以下代码创建 $ DJANGO_ROOT / templates / main.html

<html>
<head>
</head>
<body>
 {% block one_field_and_a_button %}
   <input />
   <button>I am everywhere</button>
 {% endblock %}
 {% block my_custom_content %}
 {% endblock %}
</body>
<html>

然后所有其他模板必须扩展该main.html模板并插入自己的数据。 想象一下,这是 $ DJANGO_ROOT / templates / login.html。它只会替换“my_custom_content”并继承所有其他块,包括“one_field_and_a_button”

{% extends 'templates/main.html' %}
{% block my_custom_content %} 
 Hello World! This is the login
{% endblock %}

最后,如果您想让base.html没有包含一个字段和按钮的代码部分,您可以执行以下操作。 想象一下,这是 $ DJANGO_ROOT / templates / base.html 。它将替换“one_field_and_a_button”和“my_custom_content”。但是,在这种情况下,“one_field_and_a_button”将替换为不会在您的html代码中显示的空格。

{% extends 'templates/main.html' %}
{% block one_field_and_a_button %} {% endblock %}
{% block my_custom_content %} 
 Hello World! This is my base.html template
{% endblock %}

希望它适合你!

答案 1 :(得分:1)

一般情况下,你不应该直接使用base.html,但是因为你是因为在每个其他模板中更改它会是一个巨大的麻烦,你可以做的是,在返回base的view函数中。 html,你可以在上下文中添加一个布尔值,并检查布尔值以确定你正在使用的模板。

这样的事情:

def view_that_uses_base.html(request):
   is_base = True
   return render_to_response("base.html", {"is_base":is_base}, RequestContext(request,{}))

然后在模板中:

{% block sidebar %}
{% if is_base%}
{% else %}

#Your code here
{% endif %}
{% endblock sidebar %}

答案 2 :(得分:0)

你可以在base.html中使用块标记,我想你正在搜索这样的东西

base.html文件

{% block code %}
 {% include 'sidebar.html' %}
{% endblock %}

的index.html

{% extends base.html %}
{% block code %}
{% endblock %}

以及其他所有模板  只是扩展基础html

{% extends base.html %}