DJANGO:如何在同一页面/模板中显示或访问ListView和DetailView中的数据?



我希望能够在同一页面或Django模板上呈现,显示或访问列表视图和详细信息视图。下面是我到目前为止尝试过的。这里有一个链接,在那里我得到了一个非常相似的,但有限的代码如何解决这个问题。(DJANGO:如何在同一个模板中访问ListView和DetailView中的数据?)。

当我运行runserver.py时,结果显示一个完全空白的页面,甚至在终端上也没有任何错误请帮我解决这个问题。非常感谢

models.py

class Reports(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)

title = models.CharField(max_length=255) 
name = models.CharField(max_length=255) 
email = models.EmailField(max_length = 254)
phone =  models.CharField(max_length=11) 
address = models.CharField(max_length=255, blank=True, null=True)
subject = models.CharField(max_length=255)
message = models.TextField(blank=True, null=True)

created = models.DateTimeField(auto_now_add=True)
due = models.DateTimeField(auto_now_add=False, auto_now=False, blank=True, null=True)

def __str__(self):
return self.name

class Meta:
ordering = ('-created',)

views.py

from django.shortcuts import render, redirect
from django.views.generic import TemplateView
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from datetime import timezone, tzinfo
from . models import Reports
# Create your views here.
class index(TemplateView):
template_name = 'reports_list.html'
class ReportsListView(ListView):
model = Reports
# context_object_name = 'data'
def get_queryset(self):
return Reports.objects.filter(create_date__lte=timezone.now()).order_by('-create_date')
class Detail(DetailView):
model = Reports
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)

# Add in the reports list to context
context['reports_list'] = Reports.objects.filter(create_date__lte=timezone.now()).order_by('-create_date')
return context

reports_list.html

<ul class="index-list">

{% for report in reports_list %}

<li data-id= {{ report.pk }}>
<a class="index-link" href="{% url 'reports:reports_detail' pk=report.pk %}">
<span class="index-name">{{report.title}}</span>
</a>
</li> 
{% endfor %}
</ul>

report_detail.html

{% extends 'reports_list.html' %}
{% block contentblock %}
<h1>THIS IS DETAIL VIEW</h1>

<div class="read-header">
<div class="read-title">
{{ reports.title }}
</div>
</div>

<div class="read-subtitle">
{{ reports.name }}
</div>
<div class="read-content">
{{reports.message}}
</div>  
{% endblock %}

urls . py

from django.urls import path
from . import views
from . views import index, Detail


urlpatterns = [

path('', index.as_view(), name='index'),
# path('Detail/<int:pk>/', Detail.as_view(), name='contact_detail'),
]

我可以使用详细/单页类别和类别名称/标题实现这一点,并在相同的模板中呈现它们。现在,一个URL/模板同时提供了类别名称(显示所有类别名称/标题)作为侧菜单,详细页面呈现单个项目

最新更新