我在 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')
]
可视化/视图.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
。但是,我希望在inherit_from_test.html
中看到h1
和h2
标签。相反,inherit_from_test.html
文件仅包含表示Django
的h2
标记。
为什么inherit_from_test.html
没有继承{{ hello }}
变量的内容?
如何使{{ hello }}
的内容在继承的模板中可用?
模板继承;视图不继承。只有您的test_view
才会将hello
变量发送到上下文。当您呼叫inherit_from_test_view
时,它不存在。
为了显示标题(变量"hello"(,它需要存在于您的上下文中。
尽管您继承了模板,但上下文中没有任何内容可以填充标题,因此它仍为空。
如果您使用的是基于类的视图,则可以让这些视图也相互继承或具有共同的祖先,以便同时存在两个上下文变量