html - Django - 模板对象访问详细名称

标签 html django templates

我有一个 Scrib 模型和一个模板,它将 Scrib.objects.all() 存储到 scribs

在模板中,我想访问模型的详细名称,例如:

<h1>{{ scribs.model.verbose_name }}</h1>

是否有可能或者我必须将 Scrib 处理程序添加到上下文中?

最佳答案

您不能直接从模板访问 verbose_name。据我所知,您有三个选择。

选项一(最简单)。在 Controller 中分配详细名称,然后从模板访问它:

# in controller
render_to_response('template.html', {'scrib_verbose_name': Scrib._meta.verbose_name})

# in a view template.html
Verbose name of a Scrib model: {{ scrib_verbose_name }}

选项二:为自己编写一个 View 助手,它将返回给定类的 verbose_name(或 _meta 类中的其他字段)。

更新 第三个选项(给 Uku Loskit 的提示)- 在 scrib 模型上定义一个方法,该方法返回元对象(或其中的任何特定字段)。

# method in a Scrib model
def meta(self):
    return self._meta

# later on in a template - scrib is a instance of Scrib model
<h1>{{ scrib.meta.verbose_name }}</h1>

Update2 如果您坚持直接从 scribs 访问详细名称(这是 Scrib.objects.all() 的结果) , 然后你可以做这样的事情:

scribs = Scrib.objects.all()
scribs.verbose_name = Scrib._meta.verbose_name

# in a template you can now access verbose name from a scribs variable
{{ scribs.verbose_name }}

Update3 另一种方法是使用模型继承,以便能够从继承 self 们自定义模型的任何模型的实例访问详细名称。

# base model (inherits from models.Model)
class CustomModel(models.Model):
    def meta(self):
        return self._meta

    class Meta:
        abstract = True

# Scrib now inherit from CustomModel
class Scrib(CustomModel):
    # do any stuff you want here ...

Scrib 现在继承自为我们提供属性 meta 的 CustomModel。任何将从 CustomModel 类继承的模型都将具有此属性。这是最干净、最灵活的解决方案。

关于html - Django - 模板对象访问详细名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7426912/

相关文章:

java - 我如何在手机 View 中为侧边栏菜单使用动画?

django - 使用Tag模型创建ManytoMany关系

c++ - NVIDIA NVCC 在使用模板特征类型时更改编译时间常量

c++ - 在派生类中覆盖 C++ 模板函数

php - 用于 HTML 标记转换的正则表达式

javascript - 需要帮助修复 Javascript Accordion 最小化和最大化问题(检查附加的 JsFiddle 和步骤)

javascript - 向两个不同方向切换菜单

python - 如何在django db集合自定义查询中选择数据库?

python - 使用 Python-Requests 发送带有 Django View 的请求

c++ - 具有推导类模板特化类型的变量声明符中的冗余括号