Django模板仅访问模型中的一个值

时间:2014-07-18 19:03:39

标签: python django django-models

我有各种各样的类,其中两个具有这样的结构:

class SomeClass(models.Model):
    name = models.CharField(max_length=60, db_index = True, blank=True)
    value = models.CharField(max_length=60, db_index = True, blank=True)
    year = models.DateField(db_index = True, blank=True)
    tags = models.ManyToManyField(Tag, blank=True)

    def __unicode__(self):
        return self.name

        class Meta:
            ordering = ('name',)

观点如下:

def home_page(request):
    classList = SomeClass.objects.values('name')
    someInstance = classList[0]
    return render_to_response("base.html", {"classList":classList, "someInstance":someInstance})

模板:

<!DOCTYPE html>

<html>
    <head>
    {% load staticfiles %}
    <title> Title </title>
            <link rel="stylesheet" type="text/css" href="{% static "styles/base.css" %}" />
</head>

<body>
    <div id="banner">
        BANNER TEXT
    </div>
    <div id="banner-wrapper">
    </div>  
    <div id="sidebar">
        CLASS
        <ul>
            {% for someClass in classList %}
            <li><a href="/CLP/{{class.name}}">{{class.name}}</a></li>
            {% endfor %}
        </ul>
        </div>

    <div id="someClass">
        {% block class %}

        <h2> {{someInstance.name}} </h2>
        <br>
        <h4> {{someInstance.value}} </h4> 

        {% endblock class %}
    </div>
</body>

在我的模板中,我可以随时访问{{ someInstance.name }},但如果我尝试{{ someInstance.value }}之类的话,我就无法获得值。我已经验证了值的存在,并且使用django管理页面以及shell填充了模型。我还能尝试什么?

我正在使用django 1.6

1 个答案:

答案 0 :(得分:1)

您只是在视图中提取name属性:

def home_page(request):
    classList = SomeClass.objects.values('name')
    ------------------------------^^^^^^^^^^^^^^

这就是您的对象的其他属性在模板中不可用的原因。

此外,您的模板 - 不确定它是否是复制粘贴问题:

{% for someClass in classList %}
    <li><a href="/CLP/{{class.name}}">{{class.name}}</a></li>
{% endfor %}

我相信你需要{{ someClass.name }}

此外,您的模型中存在缩进问题:

def __unicode__(self):
    return self.name

    class Meta:
        ordering = ('name',)

class Meta:应与def处于同一级别,__unicode__应返回unicode对象:

def __unicode__(self):
    return unicode(self.name)