无法应用于在Django中分割对象的_unicode__)属性

无法应用于在Django中分割对象的_unicode__)属性,django,django-templates,Django,Django Templates,我有一个模型,它存储不同对象的通用外键。我正在某处显示列表,由于空间限制,我想拼接对象名称 因此,我正在做以下工作 {{list_object.content_object|slice:":20"}} 但这是行不通的。但是当我这样做的时候 {{list_object.content_object.title|slice:":20"}} 切片工作。但是我不能使用它,因为content\u对象是一个通用外键,并且每个对象都没有名为title的属性 请帮忙 直接在对象上切片时,Django从不调用

我有一个模型,它存储不同对象的通用外键。我正在某处显示列表,由于空间限制,我想拼接对象名称

因此,我正在做以下工作

{{list_object.content_object|slice:":20"}}
但这是行不通的。但是当我这样做的时候

{{list_object.content_object.title|slice:":20"}}
切片工作。但是我不能使用它,因为
content\u对象
是一个
通用外键
,并且每个对象都没有名为title的属性


请帮忙

直接在对象上切片时,Django从不调用
\uuuuuUnicode\uuuuu
,而是将对象直接传递到过滤器中。这是应该发生的实际行为。当您在模板中执行
{{some_object}}
时,Django只会自动神奇地为您调用
\uuuuuuuunicode\uuuuu
,因为它需要打印出一些内容

您最好向模型中添加一个方法以提供一个缩短的名称,然后在模板中使用该方法:

def MyModel(models.Model):
    ...
    def get_short_content_title(self):
        return unicode(self.content_object)[:20]
{{ list_object.get_short_content_title }}
{{ list_object.get_content_title|slice:":20" }}
 {{ list_object.content_object|get_unicode|slice:":20" }}
在模板中:

def MyModel(models.Model):
    ...
    def get_short_content_title(self):
        return unicode(self.content_object)[:20]
{{ list_object.get_short_content_title }}
{{ list_object.get_content_title|slice:":20" }}
 {{ list_object.content_object|get_unicode|slice:":20" }}
或者,从技术上讲,您可以仅代理
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

def MyModel(models.Model):
    def get_content_title(self):
        return unicode(self.content_object)
在模板中:

def MyModel(models.Model):
    ...
    def get_short_content_title(self):
        return unicode(self.content_object)[:20]
{{ list_object.get_short_content_title }}
{{ list_object.get_content_title|slice:":20" }}
 {{ list_object.content_object|get_unicode|slice:":20" }}
在您的场景中效果最好的

实际上,另一种选择是创建一个简单的模板过滤器来返回对象的unicode值:

@register.filter
def get_unicode(obj):
    return unicode(obj)
然后,在模板中:

def MyModel(models.Model):
    ...
    def get_short_content_title(self):
        return unicode(self.content_object)[:20]
{{ list_object.get_short_content_title }}
{{ list_object.get_content_title|slice:":20" }}
 {{ list_object.content_object|get_unicode|slice:":20" }}

你不喜欢选择吗?;)

直接在对象上切片时,Django从不调用
\uuuuuUnicode\uuuuu
,而是将对象直接传递到过滤器中。这是应该发生的实际行为。当您在模板中执行
{{some_object}}
时,Django只会自动神奇地为您调用
\uuuuuuuunicode\uuuuu
,因为它需要打印出一些内容

您最好向模型中添加一个方法以提供一个缩短的名称,然后在模板中使用该方法:

def MyModel(models.Model):
    ...
    def get_short_content_title(self):
        return unicode(self.content_object)[:20]
{{ list_object.get_short_content_title }}
{{ list_object.get_content_title|slice:":20" }}
 {{ list_object.content_object|get_unicode|slice:":20" }}
在模板中:

def MyModel(models.Model):
    ...
    def get_short_content_title(self):
        return unicode(self.content_object)[:20]
{{ list_object.get_short_content_title }}
{{ list_object.get_content_title|slice:":20" }}
 {{ list_object.content_object|get_unicode|slice:":20" }}
或者,从技术上讲,您可以仅代理
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

def MyModel(models.Model):
    def get_content_title(self):
        return unicode(self.content_object)
在模板中:

def MyModel(models.Model):
    ...
    def get_short_content_title(self):
        return unicode(self.content_object)[:20]
{{ list_object.get_short_content_title }}
{{ list_object.get_content_title|slice:":20" }}
 {{ list_object.content_object|get_unicode|slice:":20" }}
在您的场景中效果最好的

实际上,另一种选择是创建一个简单的模板过滤器来返回对象的unicode值:

@register.filter
def get_unicode(obj):
    return unicode(obj)
然后,在模板中:

def MyModel(models.Model):
    ...
    def get_short_content_title(self):
        return unicode(self.content_object)[:20]
{{ list_object.get_short_content_title }}
{{ list_object.get_content_title|slice:":20" }}
 {{ list_object.content_object|get_unicode|slice:":20" }}

你不喜欢选择吗?;)

list_object.content_object是一个对象,由字符串表示。当然,不能对对象进行切片。为了解决您的问题,您可以尝试明确地调用unicode方法:

{{list_object.content_object.__unicode__|slice:":20"}}

我没有试过,但这是我的第一个猜测。

列出对象。内容对象是一个对象,由字符串表示。当然,不能对对象进行切片。为了解决您的问题,您可以尝试明确地调用unicode方法:

{{list_object.content_object.__unicode__|slice:":20"}}

我还没试过,但这是我的第一个猜测。

Django不允许您在模板中调用带下划线的方法。但是,如果可以的话,那肯定是最好的办法;)。啊,好的。我知道django不允许使用参数调用方法,但这对我来说是新的。谢谢,我不会用它,除非我在需要它之前忘记了;)Django不允许在模板中调用带下划线的方法。但是,如果可以的话,那肯定是最好的办法;)。啊,好的。我知道django不允许使用参数调用方法,但这对我来说是新的。谢谢,我不会用它,除非我在需要它之前忘记了;)非常感谢您提供这么多选择!!最后一个对我来说似乎是最普通的。这样我就不必在所有模型中添加方法了,我不知道Django会自动传递对象。非常感谢您提供了这么多选项!!最后一个对我来说似乎是最普通的。这样,我就不必向所有模型添加方法,因为我不知道Django会自动传递对象。