如何继承Django变量?

时间:2018-08-17 15:23:21

标签: python html django inheritance

我在围绕Django中的继承问题时遇到了一些麻烦。这是我的问题的抽象测试用例。 (请注意,我的应用程序名为viz,我刚刚在其下构建了该测试用例)

urls.py

from django.urls import path
from viz import views


urlpatterns = [
    path('test.html', views.test_view, {}, name='test'),
    path('inherit_from_test.html', views.inherit_from_test_view, {}, name='inherit_test')
]

viz / views.py

def test_view(request):
    return render(request, "viz/test.html", context={'hello': 'hello'})


def inherit_from_test_view(request):
    return render(request, "viz/inherit_from_test.html", context={'django': 'django' })

viz / static / viz / test.html

<body>
<h1>
    {{ hello }}
</h1>
<h2>
    {% block content %}

    {% endblock %}
</h2>
</body>
</html>

viz / static / viz / inherit_from_test.html

{% extends "viz/test.html" %}

{% block content %}
    {{ django }}
{% endblock %}

如预期的那样,test.html文件只有一个h1标签,上面写着hello。但是,我期望在h1中同时看到h2inherit_from_test.html标签。相反,inherit_from_test.html文件仅包含h2标记为Django的标签。

为什么inherit_from_test.html没有继承{{ hello }}变量的内容?

如何使{{ hello }}的内容在继承的模板中可用?

2 个答案:

答案 0 :(得分:1)

模板继承;视图没有。仅您的test_viewhello变量发送到上下文。呼叫inherit_from_test_view时不存在。

答案 1 :(得分:1)

为了显示标题(变量“ hello”),需要在您的上下文中显示该标题。

尽管您正在继承模板,但是上下文中没有内容可填充标题,因此它保持为空。

如果您使用的是基于ClassBased的视图,则可以让视图彼此继承或具有共同的祖先,以使两个上下文变量都存在