[英]Keep sidebar open when reload page in django
我的 django 项目中有多个带有模板的应用程序。 所有模板都扩展了我的 base.html 文件,其中包括页面侧边栏。 当我单击侧边栏上的菜单之一时,整个页面都会刷新。 如何保持打开侧边栏并只刷新页面内容? 我虽然关于使用 ajax 但我不确定这是否是正确的方法。
这是我base.html的主体部分。
<body>
<div class="wrapper">
<!-- SIDEBAR -->
{% include 'sidebar.html' %}
<!-- PAGE CONTENT -->
<!--<div class="container-fluid">-->
{% block content %}
{% endblock %}
<!--</div>-->
</div>
</body>
这是我的侧边栏。html
<div class="sidenav">
<ul class="sidebar-nav">
<li><a href="#">Menu1</a></li>
<li><a href="#">Menu2</a></li>
<li><a href="#">Menu3</a></li>
<li><a href="#">Menu4</a></li>
<li><a href="#">Menu5</a></li>
</ul>
</div>
如果您在项目开始时我可以建议使用 htmx( https://htmx.org/ )。 然后只有初始索引完全加载了基本模板。 您需要添加 div 以填充来自 htmx 调用的响应
<body>
<div class="wrapper">
<!-- SIDEBAR -->
{% include 'sidebar.html' %}
<!-- PAGE CONTENT -->
<!--<div class="container-fluid">-->
<div id="main_htmx">
{% block content %}
{% endblock %}
</div>
<!--</div>-->
</div>
</body>
然后在您的导航栏中:
<div class="sidenav">
<ul class="sidebar-nav">
<li hx-get="/menu1/" hx-target="main_htmx">Menu1</li>
<li><a href="#">Menu2</a></li>
<li><a href="#">Menu3</a></li>
<li><a href="#">Menu4</a></li>
<li><a href="#">Menu5</a></li>
</ul>
</div>
您将返回 /menu1/ 的视图应该呈现不扩展 base.html 的模板,并且不要使用其中的块。 您所需要的只是 html 的主体,例如:
<h1>Hello it's htmx get</h1>
<table></table>
Htmx 将其插入到 'main_htmx' div 中。 要记住的远不止这些,例如,如果您想在获取 htmx 后在浏览器栏中更改 url,您需要记住有人会点击刷新,您需要使用 base.html 返回全身。 您可以查看请求是由 htmx 发出的:
if request.META.get('HTTP_HX_CURRENT_URL') is not None:
或使用 django https://pypi.org/project/django-htmx/的第三方库
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.