代码的第一部分工作良好,仅供参考。
#Basic Model
class MyTestModel(models.Model):
record = models.CharField(max_length=100)
def __str__(self):
return self.record
#Specify verbose_name
class Meta:
verbose_name = 'UniqueNameExample'
verbose_name_plural = verbose_name
#Generic ListView.
class MyTemplateView(ListView):
model = MyTestModel
template_name = 'base.html'
context_object_name = 'model_list'
ordering = ['record']
#Python block in HTML template. So far, so good.
{% for item in model_list %}
{{ item.record }}<br>
#{{ item }} also works
{% endfor %}
我正试图访问视图中模型的详细名称('uniquenamexample')和模型列表。我试过注册一个过滤器、一个标记和一个简单的标记。
类似于:templatetags/verbose.py
from django import template
register = template.Library()
@register.filter (or @register.tag or @register.simple_tag)
def verbose_name(obj):
#Could be verbose_name(model) or whatever input
return obj._meta.verbose_name
之后
{% load verbose %}
在我的HTML中(它也可以正常工作),我将尝试如下操作:
{{ object|verbose_name }}
我会得到错误'str'对象没有属性'u meta'。如果使用标记,则错误相同:
{% verbose_name object %}
注:标签显然适用于早期版本,但也许我使用错误?不要求访问“record”的Model字段verbose_name,顺便说一句——这已经得到了充分的回答。
我尝试过的一件事是,如果我在MyTemplateView下设置了以下内容,那么答案就有一半是正确的:
queryset = model._meta.verbose_name
问题是它覆盖了model_列表,而我得到的唯一结果是“UniqueNameExample”,而无法访问我在模型中使用的记录。
我知道private=True代表_meta(不确定这是否相关或值得探究/可能会被破坏),但是Django admin在创建的模型列表中显示详细的_名称(如果已设置),所以我不明白为什么我不能这样做(也很难准确地追溯到它在源代码中是如何做到的)。也许它不是一个普通的列表视图而是一个MixIn?基于功能?
有数千个模型的大型(ish)db,每个模型都有唯一的详细名称;非常希望保持它的简单性。