模板扩展了基本内容.html但没有获取侧边栏的内容



我有一个base_planner.html,它包含一个导航栏和一个侧边栏。当我在任何其他模板中扩展这个基础时,导航栏和侧边栏都是继承的,但侧边栏没有任何必须存在的内容。我没有犯任何错误。唯一具有侧边栏内容的模板是主页,它只是一个ListView html页面(projectsmodel_list.html),包含一行:{% extends 'app_plannerbase_planner.html' %}

以下是我的views.py(我希望TestView继承侧边栏内容):

class ProjectListView(LoginRequiredMixin, generic.edit.FormMixin, generic.ListView):
context_object_name = 'project_list'
model = ProjectsModel
form_class = ProjectsForm
success_url = reverse_lazy('app_planner:planner_home')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['create_project_form'] = ProjectsForm()
return context

def form_valid(self, form):
project_name = form.cleaned_data['project_name']
project_author = self.request.user
create_project_form_item = ProjectsModel(project_name=project_name, project_author=project_author)
create_project_form_item.save()
return super().form_valid(form)
def form_invalid(self, form):
return super().form_invalid(form)
def post(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)

class TestView(generic.TemplateView):
template_name = 'app_planner/test.html'

这是我的urls.py:

app_name = 'app_planner'
urlpatterns = [
path('', views.ProjectListView.as_view(), name='planner_home'),
path('test/', views.TestView.as_view(), name='test'),
]

这是我base_planner.html:的正文

{% if user.is_authenticated %}
<nav id='navbar' class="navbar navbar-expand-lg bg-white">
<div class="container-fluid">
<a id='logo' class="navbar-brand" href="{% url 'app_planner:planner_home' %}"><h3><b><span style="color:#FC5E5E;">Savvy</span> Planner</b></h3></a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav">
<div class="navbar-center">
<a id='projects_board' class="nav-link {% if request.resolver_match.view_name == 'app_planner:planner_home' %}active{% endif %}" href="{% url 'app_planner:planner_home' %}">Projects & Tasks</a>
<a id='analytics' class="nav-link {% if request.resolver_match.view_name == 'app_planner:analytics' %}active{% endif %}" href="#">Analytics</a>
<a id='analytics' class="nav-link {% if request.resolver_match.view_name == 'app_planner:test' %}active{% endif %}" href="{% url 'app_planner:test' %}">Test</a>
</div>
<div class="navbar-right">
<a id='notifications' class="nav-link" href="#"><img src="{% static 'notifications_empty.svg' %}"></a>
<a id='logout' class="nav-link" href="{% url 'app_planner:logout' %}" class="btn btn-simple"><img src="{% static 'logout.svg' %}" width="20" height="20"></a>
</div>
</div>
</div>
</div>
</nav>
<div class="sidebar">
<div class='row' style="font-family: 'Nunito', sans-serif; padding-bottom: 25px;">
<div class='col-sm-6' style="height: 60px; width: 60px; border-radius: 16px; background-color: #FC5E5E;"></div>
<div class="col-sm-6" style="width: fit-content;">
<p><span style='font-size:25px'><b>Awesome Team</span><br>
<span style='color:#888B94'>Workspace</span></b></p>
</div>
</div>

<div class='sidebar_projects' style="border-top: solid 2px #E3E4E9; margin-left: -10px;">
<br>
<form method="POST">
{% csrf_token %}
<div class='row project_form'>
{% for field in create_project_form %}
<div class='col-sm-4' style='align-items:center; display: flex;'>{{ field.label }}</div>
<div class='col-sm-4'>{{ field }}</div>
<div class='col-sm-4' style='align-items:center; display: flex;'><button id='add_project' type="submit" style='background:white;border:0px;'><img src="{% static 'plus_button.svg' %}"></button></div>
{% endfor %}
</div>
</form>
<div class="row">
{% for project in project_list %}
<div class='col-sm-12 single_project'><a href="{% url 'app_planner:project_detail'  pk=project.pk %}"><span style='color:rgba(255, 255, 255, 0);'>__</span>{{ project.project_name }}</a></div>
{% endfor %}
</div>
</div>
</div>
<div class='content'>
{% block content %}
{% endblock %}
</div>
{% endif %}

这是我的测试.html

{% extends 'app_planner/base_planner.html' %}
{% block content %}
<h1>Check the sidebar</h1>
{% endblock %}

我尝试过更改模板,将ProjectListView的内容添加到其他视图,创建一个单独的sidebar.html,并在base_planner.html的{%block sidebar%}中使用{%include‘app_planner/sidebar.html%}调用其他模板中的{%super.sidebar%n},但都没有成功。我一直看到一个空的侧边栏。这是我第一次面对这样的问题,因为{%extend%}对我来说一直都是正确的。我不明白错误在哪里。

拉斐尔给了我一个好主意。真的,我只是忘了给我的TestView显示内容。这个效果很好,谢谢!

class TestView(generic.TemplateView):
template_name = 'app_planner/test.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
project_list_view = ProjectListView()
project_list_view.request = self.request
project_list_view.object_list = project_list_view.get_queryset()
project_list = project_list_view.get_context_data()['project_list']
context['project_list'] = project_list
return context

最新更新