Djequo ifequal template

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 
+4
source share
2 answers
 {% for id in pflags %}{% ifequal id city.id %} ... {% endfor %} 

Could it be that id is a string and city.id is an integer?

+5
source

You sent the code in endless loops if either pflags or mflags were not empty.

Consider, for example, this snippet from your code:

  i = 0 while i < len(pflags): pflags[i] = int(pflags[i]) 

that this is the end of the loop - there is no increment i at all. This is an infinite loop if len(pflags) not 0 !

Thus, either you placed a code different from what you are using (in this case, it’s rather strange for you to expect help ;-), or both of them are really empty, and therefore internal loops in the template are executed 0 times each.

I suspect the second possibility is obtained, but, of course, I cannot see these xxxFlags values ​​to confirm my suspicion (you can and should: log them, for Pete !!).

+1
source

All Articles