gpt4 book ai didi

python - Django: ListView 。我在哪里可以声明我想在模板上拥有的变量?

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:20 24 4
gpt4 key购买 nike

我的应用程序中的一个表称为 Gallery,我有以下类来列出该表上的所有对象:

from django.views.generic import ListView
from galleries.models import Gallery

class GalleryList(ListView):
template_name = "path/to/template"
context_object_name = "object_list"

def queryset(self):
return Gallery.objects.order_by('-title')[:20]

它完成了工作。在我的模板上,我执行以下操作:

{% block gallery_list %}
<h1>Gallery List</h1>
<ul>
{% for gallery in object_list %}
<li><img src="{{ gallery.thumbnail.url }}" />{{ gallery.title }}</li>
{% endfor %}
</ul>
{% endblock %}

一切都按预期进行。这里的事情是,在我的 base.html 模板上,我有 {% block title %} 用于 meta title 标签,{ % block description %} 用于标题中的 meta description 标记。我希望能够在某处声明它并将其传递给 View 。需要明确的是,变量 titledescription 是字符串(例如:title="网站上所有画廊的列表")。

在 View 上我想做类似的事情:

{% extends "base.html" %}

{% block title %}{{ title }}{% endblock %}
{% block description %}{{ description|default:title }}{% endblock %}

但是,在 GalleryList 类上,我不知道在哪里声明变量 titledescription。我不知道这对 Django 来说是否可行或合适。我想做正确的事。

另外,因为我有一个服装模板来列出我可以做的所有画廊:

{% extends "base.html" %}

{% block title %}List of all galleries on website{% endblock %}
{% block description %}List of all galleries on website...{% endblock %}

但话又说回来,我不知道这是否适合编码良好的 Django 应用程序。我是 Django 的初学者,我想知道解决这个问题的方法。希望我的问题足够清楚。

最佳答案

您可以覆盖 ListView get_context_data method将您想要的任何其他上下文变量添加到上下文中:

class GalleryList(ListView):

def get_context_data(self, **kwargs):
ctx = super(GalleryList, self).get_context_data(**kwargs)
ctx['title'] = 'My Title'
ctx['description'] = 'My Description'
return ctx

另一种方法——使用一个模板来填充这些信息——也很不错。哪个更好实际上取决于数据的动态程度。如果标题/描述是基于模型数据或其他一些因素,那么在 View 中设置它是有意义的。如果它针对特定模板是固定的,那么将其放入扩展 base.html 的模板中可能更清晰。

关于python - Django: ListView 。我在哪里可以声明我想在模板上拥有的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37370534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com