Django - 如何在 base.html 中传递上下文?
Posted
技术标签:
【中文标题】Django - 如何在 base.html 中传递上下文?【英文标题】:Django - how to pass context in base.html? 【发布时间】:2018-12-28 09:00:20 【问题描述】:我的 well_list.html 如下所示:
单击其中一行将转到此页面:
以上页面使用了两个html文件:base.html + contextual_main.html。 Base有侧边栏导航,后者是从base延伸出来的。在我的 views.py 中,我可以像这样轻松地将上下文数据传递到 contextual_main.html:
views.py
class ContextualMain_DetailView(DetailView):
template_name = 'contextual_main.html'
context_object_name = 'single_well_info'
model = models.WellInfo
contextual_main.html
<button type="button" class="btn btn-default" data-container="body" data-toggle="popover">
<a href="% url 'contextual:bha' pk=single_well_info.api %">BHA</a>
</button>
我还需要将上下文 single_well_info
注入 base.html。所以我尝试以与 contextual_main.html 相同的方式注入它,但它不起作用。我该怎么做?
编辑---------------------------------------------- ----------------------
base.html:
<body class="nav-md">
<div class="container-fluid body">
<div class="main_container">
<!-- side bar -->
<div class="col-md-3">
<div class="left_col scroll-view">
<!-- sidebar menu -->
<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
<div class="menu_section">
<ul class="nav side-menu">
<li><a href="% url 'well_list' %"><i class="fa fa-list-ol"></i> Well List </a>
</li>
<li><a><i class="fa fa-bookmark"></i> My Wells </a>
</li>
<li><a><i class="fa fa-dashboard"></i> Dashboard </a>
</li>
<li><a><i class="fa fa-edit"></i> Contextual <span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="% url 'contextual:bha' pk=single_well_info.api %">BHA</a></li>
<li><a href="">Integrity Test</a></li>
<li><a href="">Casing</a></li>
<li><a href="">Cementing</a></li>
<li><a href="">Consumables</a></li>
<li><a href="">Daily Ops</a></li>
<li><a href="">Logging Data</a></li>
<li><a href="">Daily Cost</a></li>
<li><a href="">Mud</a></li>
<li><a href="">Equipments</a></li>
<li><a href="">Pumps</a></li>
<li><a href="">Survey</a></li>
<li><a href="">Time Log</a></li>
<li><a href="">Vol & Losses</a></li>
<li><a href="">Weather</a></li>
<li><a href="">Well Cond</a></li>
<li><a href="">Personnels</a></li>
</ul>
</li>
<li><a><i class="fa fa-clock-o"></i> Real Time <span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="">Operation</a></li>
<li><a href="">Beliefs and Alerts</a></li>
<li><a href="">Drilling Optimization</a></li>
</ul>
</ul>
</div>
</div>
</div>
</div>
<!-- /side bar -->
<div class="right_container">
<div class="container-fluid">
% block content % % endblock %
</div>
</div>
</div>
</div>
</body>
当我在 base.html 中编写编辑 <a href="">
时,我的 PyCharm IDE 识别了 contextual:bha
参数,但它不识别 pk=single_well_info.api
参数,这就是问题所在。在我看来,当 base.html 通过 views.py 的 @987654332 扩展时,上下文没有注入到 base.html @调用
【问题讨论】:
在base.html中添加block
并在块内添加上下文
@seuling 我不明白你在说什么,因为 base.html 已经有一个块,并且 contextual_main.html 在base.html 内的块。上下文已经在块内注入,但上下文在块外不起作用。
因此您可以在导航中添加其他块。或者您可以添加自己的 context_processor 以将上下文发送到 base.html - 但您不必在其他页面中传递这些数据,对吧?
它应该可以正常工作。 “它不起作用”是什么意思?请从您的base.html
发布相关部分。
@Selcuk 请检查编辑
【参考方案1】:
您可能正在每个页面中扩展 base.html。因此,在您的每个视图函数/类中传递 single_well_info_context 绝对不是枯燥的。
您希望将 single_well_info 添加到您的上下文中,以使其在您的所有页面中可用。
您需要打开您的 settings.py 并向您的 TEMPLATE_CONTEXT_PROCESSORS 添加一个新上下文:
'context_processors': [
...
# add a context processor
'my_app.context_processor.single_well_info',
],
single_well_info 的功能类似于:
def single_well_info(request):
return
'api':"Hello",
【讨论】:
我对这种方法的一个复杂情况是,single_well_info
应该与 views.py 的 ContextualMain_DetailView
中的对象相同。如何确保 context_processor 中的 single_well_info
与我传递给 *contextual_main.html 的对象实例完全相同?
您需要根据请求或新参数调整您的函数def single_well_info(request):。请记住,为了帮助您,我们没有您的代码的大图。以上是关于Django - 如何在 base.html 中传递上下文?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 的 base.html 中插入多个块?
如何在html文件中加载css文件已经在django中扩展了另一个html文件(base.html)
Django:在 django admin 中扩展 base.html