注意:这个问题不是关于创建或使用基本模板的!
我正在我的项目中创建一个products
应用程序,只使用Django和html/css,这部分中的所有页面都有一个侧栏导航菜单,其中分类了不同的产品型号和类型.所以这个侧边栏将在所有其他产品页面中使用.
这是我的views.py
%文件:
from django.shortcuts import render
from .models import (
Product,
Usage,
SubUsage,
MainModel,
PumpType,
HeadFlowDataSet,
)
def products_usage_main(request):
product_queryset = Product.objects.all()
usage_queryset = Usage.objects.all()
sub_usage_queryset = SubUsage.objects.all()
main_model_queryset = MainModel.objects.all()
pump_type_queryset = PumpType.objects.all()
context = {
"product_queryset": product_queryset,
"usage_queryset": usage_queryset,
"sub_usage_queryset": sub_usage_queryset,
"main_model_queryset": main_model_queryset,
"pump_type_queryset": pump_type_queryset,
}
return render(request, "products/products_usage_main.html", context)
def sidebar_data(request):
usage_queryset = Usage.objects.all()
sub_usage_queryset = SubUsage.objects.all()
main_model_queryset = MainModel.objects.all()
pump_type_queryset = PumpType.objects.all()
context = {
"usage_queryset": usage_queryset,
"sub_usage_queryset": sub_usage_queryset,
"main_model_queryset": main_model_queryset,
"pump_type_queryset": pump_type_queryset,
}
return render(request, "products/products_sidebar.html", context)
侧栏模板如下图所示:
<ul class="nav flex-column list-unstyled my-3 ms-3">
{% for usage_item in usage_queryset %}
<li class="nav-item p-2 ms-4">
<a href="#" class="text-decoration-none nm-text-color fw-semibold"
data-bs-toggle="collapse"
data-bs-target="#usage_{{ usage_item.usage_name_fa }}">
<i class="fa-solid fa-angle-left me-2 icon-selector"></i>
الکتروپمپهای {{ usage_item.usage_name_fa }}
</a>
<ul class="submenu collapse" id="usage_{{ usage_item.usage_name_fa }}"
data-bs-parent="#nav_accordion">
{% for sub_usage in sub_usage_queryset %}
{% if sub_usage.usage == usage_item %}
<li class="my-2 ms-4">
<a href="#" class="text-decoration-none nm-text-color fw-semibold">
{{ sub_usage }}
</a>
</li>
{% endif %}
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
例如,现在我正在创建一个Proucts主页,它应该实现这个侧边栏. 我将此侧栏模板包含在我的产品页面模板中,如下所示:
<section>
<div class="container-fluid">
<div class="row">
<div class="col-6 col-lg-4 px-0">
{% include "products/products_sidebar.html" %}
</div>
<div class="col-6 col-lg-8">
content
</div>
</div>
</div>
</section>
现在,我知道如果没有URL,就不会调用视图sidebar_data()
,目前我的URL如下所示:
urlpatterns = [
path("application/", products_usage_main, name="products_usage_main"),
path("application/<str:pk>", product_detail, name="product_detail"),
]
正如预期的那样,在sidebar_data()
视图中发送的上下文数据将不会被发送,因此我的侧边栏将不会填充数据.
我怎么才能接受这个呢?
有一种方法,我必须在所有不同的产品页面中将查询集数据发送到侧边栏,但我认为应该有一种更充分的方法.
提前感谢您的帮助.