繁体   English   中英

Django检查对象的属性值

[英]Django checking an object's attribute's value

我有两个类似的模型,它们的类型属性等于“出租车”或“公共汽车”,我想检查上下文处理器中对象是出租车还是公共汽车。 我试过了

if element.type == "bus":

但它没有返回。 我知道这是因为这不是那么简单。 我还尝试将element.type转换为str ,这显示了问题,但我不知道如何解决。

models.py:

class Element(models.Model):
    user = models.ForeignKey(User, null=True, blank=True)
    name = models.CharField(max_length=20)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    type = models.CharField(max_length=20)

用户只能将“出租车”或“公共汽车”添加为字符串以键入字段。

意见:

def home(request, id):
    site = Site.objects.get(id=id)
    elements = Element.objects.filter(site_name=site)

    return render_to_response("base.html", locals(), context_instance=RequestContext(request))

base.html:

{% load ttag %}
{% for e in elements %}
{% elements request e.id %}
{% endfor %}

上下文处理器:

def elements(request, id):
    element = Element.objects.get(id=id)
    if element.type == "taxi":
        list = {'element':element}
        return render_to_string("taxi.html", list)
    elif element.type == "bus":
        list = {'element':element}
        return render_to_string("bus.html", list)

我如何检查是公共汽车还是出租车? 谢谢。

我认为这可能简单,而且我感觉到您的工作量比需要的多。 这应该工作:

在查看代码中:

elements = Element.objects.filter(site_name=site)  # or whatever

在模板代码中:

{% for e in elements %}
    {% if e.type == 'taxi' %}
       <!-- do taxi stuff -->
    {% elif e.type == 'bus' %}
       <!-- do bus stuff -->
    {% endif %}
{% endfor %}

如果那不能解决问题,那怎么了? 您确定所有“元素”对象都具有“类型”属性吗?

我不知道您是如何使用上下文处理器的,但是不能用作模板中的函数。 开始渲染模板之前,上下文处理器会更改模板中的上下文。

一个简单的解决方案是向Element添加方法并动态包含模板:

class Element(models.Model):
    user = models.ForeignKey(User, null=True, blank=True)
    name = models.CharField(max_length=20)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    type = models.CharField(max_length=20)

    def get_template_name(self):
        if self.type == "bus":
            return 'bus.html'
        if self.type == "taxi":
            return 'taxi.html'

在您的模板中:

{% for element in elements %}
    {% include element.get_template_name with element=element %}
{% endfor %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM