我需要创建一个带有表单的小边块(它只包含一个字段和按钮),我希望它包含在除base.html
之外的每个页面中
我考虑过制作简单的视图功能,但也许有更好的方法可以做到这一点?
我正在使用Python和Django 1.6
答案 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 %}