django - Django 中通用 ListView 中的多个模板

标签 django django-templates django-generic-views

我有一个对象列表,可以将其视为一个单独的页面或在另一个页面中(通过 ajax)。

所以,在我的模板中,我有一个只有列表本身的“list_template.html”,当我在另一个页面中查看列表时使用它,还有一个“full_list_template.html”,它扩展了基本模板并使用“include”标签在其中包含“list_template”。

我想在两种情况下都使用相同的 URL 来获取项目列表。我还使用通用的 ListView 来显示对象列表。

几个问题:

1) 在两种情况下使用相同的 URL 是一种好方法吗?

2) 如果是,如何让一个 URL 与 ListView 关联并根据“请求”更改 template_name 参数?

最佳答案

是的,您可以在两种情况下使用相同的 URL,并通过检查 request.is_ajax() 的值来设置适当的模板。现在不使用 template_name 类属性,而是覆盖 get_template_names() 方法(此方法应返回模板列表,将使用找到的第一个模板):

class MyView(ListView):
    def get_template_names(self):
        if self.request.is_ajax():
            return ['list_template.html']
        return ['full_list_template.html']

关于django - Django 中通用 ListView 中的多个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749512/

相关文章:

python - 如何自定义奥斯卡地址表单字段?

python - django:模板中字符串的神秘填充

python - Django - 无法注册标签库

django - 使用 get_object_or_404 时无法解压不可迭代的 int obj

列 "owner_id"中/new null 值处的 Django IntegrityError 违反了非空约束

python - 交易管理错误: This code isn't under transaction management when trying to test

python - Django 1.7 和智能、深度、过滤聚合

python - Django url 名称查找

django:我可以在 html 模板中编写 python 吗?

Django 使用 UpdateView 上传文件