Model name of objects in django templates

前端 未结 5 1574
遥遥无期
遥遥无期 2020-12-09 07:59

Is there any way to get the model name of any objects in django templates. Manually, we can try it by defining methods in models or using template tags... But is there any b

相关标签:
5条回答
  • 2020-12-09 08:07

    You can very easily access the content type of the page, this way you don't even need to poke into the specific:

    {% if pub.content_type.app_labeled_name == 'home | publication' %}
        {% include "home/publication.html" with pub=pub.specific %}
    {% endif %}
    
    0 讨论(0)
  • 2020-12-09 08:11

    Django added a publicly accessible API to model options called _meta, but you still can't access variables with an underscore in the template. Use a template filter:

    @register.filter
    def verbose_name(instance):
        return instance._meta.verbose_name
    

    In the template:

    {{ instance|verbose_name }}
    

    I even like to chain the title filter to capitalize the words in the my template:

    {{ instance|verbose_name|title }}
    
    0 讨论(0)
  • 2020-12-09 08:22

    You cannot access the class name directly. Doing something like this:

    {{ object.__class__ }}
    

    will cause a TemplateSyntaxError: Variables and attributes may not begin with underscores. Django doesn't let you access those sorts of attributes - Python conventions means they are hidden implementation details, not part of the object's API.

    Create a template filter instead, and then you can use it as follows:

    {{ object|model_name_filter }}
    

    Creating filters is very easy: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

    0 讨论(0)
  • 2020-12-09 08:25

    Since 1.2 version and may be early Django has an attribute opts into templates. The atribute is link to model._meta For evidence you should look at source code into Github

    It used into template very simple: {{opts}} or {{opts.db_table}}

    0 讨论(0)
  • 2020-12-09 08:29

    object.__class__.__name__ or object._meta.object_name should give you the name of the model class. However, this cannot be used in templates because the attribute names start with an underscore.

    There isn't a built in way to get at that value from the templates, so you'll have to define a model method that returns that attribute, or for a more generic/reusable solution, use a template filter:

    @register.filter
    def to_class_name(value):
        return value.__class__.__name__
    

    which you can use in your template as:

    {{ obj | to_class_name }}
    
    0 讨论(0)
提交回复
热议问题