python - Django - 结合 DetailView 和 ListView

标签 python django django-views

我是 Django 的新手,我想构建一个网络应用程序来显示您的事件列表。您可以有多个不同的列表(例如体育赛事、生日……)。我制作了两个模型 - 日历(事件列表)和事件。

在我的页面上,我有导航菜单,您可以在其中看到“日历”列表。当您单击一个日历时,您可以看到该日历的事件列表,但我还想在侧边栏中保留一个日历列表。

据我了解 Django,我需要两个 View - ListView(用于侧边栏日历)和 DetailView(用于每个日历上的事件)。

以下是我的观点:

class DetailView(generic.DetailView):
    model = Calendar
    template_name = 'koledarji/detail.html'

class CalendarsView(generic.ListView):
    template_name = 'koledarji/calendars.html'
    context_object_name = 'calendars_list'
    def get_queryset(self):
        return Calendar.objects.all()

通过这种方法,我在每个特定日历上的详细信息都可以,但是我在侧边栏导航菜单上丢失了我的日历列表。

我的特定日历的网址:

url(r'^(?P<pk>[0-9]+)$', views.DetailView.as_view(), name='detail'),

和我的模板的一部分:

{% extends 'prijavljen/calendar.html' %}

{% block cal_name %}

    {% for calendar in calendars_list %}
        {% if request.path == '/prijavljen/'|add:calendar.id %}
            {{calendar.name }}
        {% endif %}
    {% endfor %}
{% endblock %}

在那段代码之后,我想列出一个事件列表,但例如,即使是日历名称也应该足以解决。

我试图通过将 request.path 与我想要的路径 od calendar 进行比较来解决这个问题,但也没有用。

如有任何帮助,我们将不胜感激。

最佳答案

您可以修改 DetailView 类并添加一个 get_context_data() 方法。这将允许您将额外的上下文(在本例中为您的 Calendars.objects.all() 查询集)注入(inject)到您的详细信息 View 中。

class MyDetailView(generic.DetailView):
    model = Calendar
    template_name = 'koledarji/detail.html'
    def get_context_data(self, *args, **kwargs):
        context = super(MyDetailView, self).get_context_data(*args, **kwargs)
        context['calendars_list'] = Calendar.objects.all()
        return context

关于python - Django - 结合 DetailView 和 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41287431/

相关文章:

django - 如何为 django-taggit 创建列表和详细 View ?

django - 通过过滤对象列表来获取对象列表

python - 在执行操作的单独子数组中获取 numpy 子数组的结果,而不使用 for 循环

python - 以 10 为基数的 int() 的文字无效 :\xef\xbb\xbf10

django - 使成功消息在 django 表单提交几秒钟后消失并显示空表单

python - 为什么gunicorn会显示一个额外的进程?

django - 在不加载 View /url 的情况下运行迁移

python - Dockerfile 在文件夹中运行 scrapy scrapy 命令

python - 如何迭代 pandas 数据帧行,查找字符串并分成列?

python - 在 Python 中计算日期是开始、 future 还是现在