I use the ifequal tag in my django template inside the loop, where at least one of the elements must be equal to the other at some point in the loop, but for some reason it never displays what it needs. I was wondering if there were any strange cases that I should know about.
I have a list of int city identifiers that should be flagged. since I go through all the cities, for each of them I look through those that need to be checked to see if the list is equal anywhere. But for some reason, none of them will ever compare. I checked that the data is correct using the django shell, so I know it there, I think I am missing some small details on how I use it. Here is the code:
View:
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')
Clip Template:
{% 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 Model:
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
Console Test:
>>> 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]
Log value:
1