我有两个类似的模型,其类型属性等于“taxi”或“bus”,我想检查一个对象是否是我的上下文处理器中的出租车或总线。 我试过了
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)
用户只能将“taxi”或“bus”作为字符串添加到类型字段中。
的观点:
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)
我如何检查是公共汽车还是出租车? 感谢。
答案 0 :(得分:1)
我认为 可能是直截了当的,我觉得你的工作比你需要的要困难得多。这应该有效:
在视图代码中:
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 %}
如果不能解决问题,会出现什么问题?您确定所有“元素”对象都具有“类型”属性吗?
答案 1 :(得分:1)
我不知道您是如何使用上下文处理器的,但这不能用作模板中的函数。在开始呈现模板之前,上下文处理器会在模板中更改上下文。
一个简单的解决方案是向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 %}