Django模板ifequal标签
我在Django的模板中使用了一个ifequal标签,这个标签是在一个循环里用的,循环中的某个项目至少应该在某个时刻和另一个项目相等,但不知道为什么它从来没有显示出应该显示的内容。我想知道有没有什么奇怪的情况是我应该了解的。
我有一个城市ID的整数列表,这些ID应该作为复选框进行检查。所以在我遍历所有城市的时候,对于每一个城市,我都会遍历那些应该被选中的城市,看看它们是否在列表中有相等的值。但不知道为什么,它们从来没有匹配上。我通过Django的命令行确认了数据是正确的,所以我知道数据是存在的,我觉得我可能在使用上漏掉了什么小细节。以下是代码:
视图:
def editprof(request):
try:
if request.session['id']:
loggedin = True
except KeyError:
loggedin = False
try:
citylist = CityList.objects.all()
userid = request.session['id']
user = MemberProfile.objects.get(pk=userid)
p = decrypt_pwd(user.Password)
pflags = user.PublicVisibleFlags
log_val(pflags[0])
pflags = pflags.split(',')
mflags = user.MemberVisibleFlags
log_val(mflags[0])
mflags = mflags.split(',')
return render_to_response('editprof.html', {'user':user, 'p':p, 'loggedin':loggedin, 'citylist':citylist, 'pflags':pflags, 'mflags':mflags})
except KeyError:
return HttpResponse('You must be logged in to view this page!')
except MemberProfile.DoesNotExist:
return HttpResponse('DatabaseError')
模板片段:
{% for city in citylist %}
<tr>
<td><input type='checkbox' name='public' value='{{ city.id }}' {% for id in pflags %}{% ifequal id city.id %}checked{% endifequal %}{% endfor %} /></td>
<td><input type='checkbox' name='private' value='{{ city.id }}' {% for id in mflags %}{% ifequal id city.id %}checked{% endifequal %}{% endfor %} /></td>
<td>{{ city.CityName }}</td>
</tr>
{% endfor %}
MemberProfile模型:
class MemberProfile(models.Model):
Username = models.CharField(max_length=12,unique=True)
Password = models.CharField(max_length=12)
SecurityLevel = models.IntegerField()
AccountExpirationDate = models.DateField()
CityList = models.TextField()
Address1 = models.CharField(max_length=30)
Address2 = models.CharField(max_length=30)
City = models.CharField(max_length=20)
State = models.CharField(max_length=2)
Zip = models.CharField(max_length=10)
Email = models.EmailField()
AltEmail = models.EmailField()
HomePhone = models.CharField(max_length=18)
BusinessPhone = models.CharField(max_length=18)
Fax = models.CharField(max_length=18)
Cell = models.CharField(max_length=18)
AltPhone = models.CharField(max_length=18)
PublicVisibleFlags = models.TextField()
MemberVisibleFlags = models.TextField()
WhoAmI = models.TextField()
CompanyName = models.CharField(max_length=30)
ServicesOffered = models.TextField()
NumberOfUnits = models.IntegerField()
SCREIAOffice = models.CharField(max_length=10)
LastModifyBy = models.CharField(max_length=12)
LastModifyDate = models.DateField(auto_now=True)
def __unicode__(self):
return self.Username
控制台测试:
>>> from screia.core.models import MemberProfile
>>> user = MemberProfile.objects.get(pk=1)
>>> pflags = user.PublicVisibleFlags.split(',')
>>> print pflags
[u'1', u'4', u'7', u'12', u'25']
>>> i = 0
>>> while i < len(pflags):
... pflags[i] = int(pflags[i])
... i+=1
...
>>> print pflags
[1, 4, 7, 12, 25]
日志值:
1
2 个回答
1
你发的代码如果
pflags
或比如,看看你代码中的这段:
i = 0
while i < len(pflags):
pflags[i] = int(pflags[i])
就这样——循环结束了——没有任何地方让i
增加。这就会造成无限循环,除非len(pflags)
是0
!
所以,要么你发的代码和你实际使用的代码不一样(这样的话,你还指望别人帮忙就有点奇怪了;-),要么这两个变量确实都是空的,因此模板中的内部循环每次都执行0次。
我怀疑是第二种情况,但我当然看不到那些xxxFlags
的值来确认我的猜测(你可以看到,而且应该去查看:记录一下,拜托!-)。
5
{% for id in pflags %}{% ifequal id city.id %} ... {% endfor %}
有可能id是一个字符串,而city.id是一个整数吗?