[英]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.