社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django 2.1-在模板视图中显示模型元类详细名称

random_py_guy • 5 年前 • 324 次点击  

代码的第一部分工作良好,仅供参考。

#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,每个模型都有唯一的详细名称;非常希望保持它的简单性。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50477
 
324 次点击  
文章 [ 1 ]  |  最新文章 5 年前