我在围绕Django中的继承问题时遇到了一些麻烦。这是我的问题的抽象测试用例。 (请注意,我的应用程序名为viz
,我刚刚在其下构建了该测试用例)
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')
]
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' })
<body>
<h1>
{{ hello }}
</h1>
<h2>
{% block content %}
{% endblock %}
</h2>
</body>
</html>
{% extends "viz/test.html" %}
{% block content %}
{{ django }}
{% endblock %}
如预期的那样,test.html
文件只有一个h1
标签,上面写着hello
。但是,我期望在h1
中同时看到h2
和inherit_from_test.html
标签。相反,inherit_from_test.html
文件仅包含h2
标记为Django
的标签。
为什么inherit_from_test.html
没有继承{{ hello }}
变量的内容?
如何使{{ hello }}
的内容在继承的模板中可用?
答案 0 :(得分:1)
模板继承;视图没有。仅您的test_view
将hello
变量发送到上下文。呼叫inherit_from_test_view
时不存在。
答案 1 :(得分:1)
为了显示标题(变量“ hello”),需要在您的上下文中显示该标题。
尽管您正在继承模板,但是上下文中没有内容可填充标题,因此它保持为空。
如果您使用的是基于ClassBased的视图,则可以让视图彼此继承或具有共同的祖先,以使两个上下文变量都存在