如何继承 Django 变量?



我在 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中看到h1h2标签。相反,inherit_from_test.html文件仅包含表示Djangoh2标记。

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

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

模板继承;视图不继承。只有您的test_view才会将hello变量发送到上下文。当您呼叫inherit_from_test_view时,它不存在。

为了显示标题(变量"hello"(,它需要存在于您的上下文中。

尽管您继承了模板,但上下文中没有任何内容可以填充标题,因此它仍为空。

如果您使用的是基于类的视图,则可以让这些视图也相互继承或具有共同的祖先,以便同时存在两个上下文变量

最新更新