The main problem is that the child data will not be processed in the correct order.
I have a problem with nested loop in Django. I have a model like this: <code>class Category(models.Model): name = models.CharField(max_length=100) parent = models.ForeignKey('self', blank=True, null=True, related_name='children') def __unicode__(self): return self.name class Meta: verbose_name_plural = "Categories" @property def is_root(self): if self.parent is None: return True # or use `if not self.parent` instead of `if self.parent is None`? I'm not sure what you want here... maybe just `return True`? That would make it the root node if it doesn't have a parent... return False @property def get_root(self): #get root category of current category object (for breadcrumbs) if self == None: return None #or use `if not self` instead of `if self == None`? I'm not sure what you want here... maybe just `return True`? That would make it the root node if it doesn't have a parent... p = self.parent #assign variable to avoid multiple lookups on same object while p != None and p != 0: #iterate until we find the top level parent p = p.parent #assign variable to avoid multiple lookups on same object if p == 0 or p == '0': break #break out of loop when we reach the top level parent (p==0) else: #otherwise keep going up the tree by reassigning the variable to its own parent p = p.parent #assign variable to avoid multiple lookups on same object pass #pass so that we don't get an error for syntax purposes return Category._default_manager.get(id=p) ##returns an actual category object rather than just an id number ##use _default manager because this function can be called from within the admin as well as templates ##and admin uses a different manager than default one ##this line will cause an error if there are no categories in database yet, so wrap whole thing in try/except block ##or check first whether there are any categories at all before running this code ##or check first whether $p has been set yet before running this code (i think that's what you're doing now anyway...) ##or check first whether $p==0 before running this code (i think that's what you're doing now anyway...) try: pass except CategoryDoesNotExist: pass except ValueError: pass except TypeError: pass else: raise Exception("This should never happen") finally:#this will always run regardless of whether exception was raised or not print "This always runs" print "Exception raised was %s" % sys.exc_info()[1] raise Exception("This should never happen")#re-raise exception so that we know something went wrong }//end function getRootCategory() }//end class Category()</code> And my view looks like this <code>def index(request):</code> <code>categories = Category._default_manager .filter(isnull=False).order_by('-id') .exclude(children__isnull=False)</code> <code>context={'categories':categories}</code> <code>return render('index', context)</code><blockquote><blockquote><blockquote><blockquote></blockquote></blockquote></blockquote></blockquote><pre><pre style="font-family:'Courier New'; font-size:'10pt';"><span style="color:#000000;">And my template looks like </span><span style="color:#0000ff;">this</span>:<br /><ul><br />{% for category in categories %}<br /><li>{{category}}</li><br />{% endfor %}<br />{% for category in categories %}<br />{% for child in category|getChildren %}<br />{{child}} - {{category}} - {{child|getParent}} - {{child|getRootCategory}} - {{category|getRootCategory}} - {% endfor %}<br />} {% endfor %} </ul>"</pre></pre></div></div>"</div>"</div>"</div>"</div>"</div>"</div>" </body > </html > </body > </html > </body > </html > </body > </html > <script type="text/javascript"> var _gaq=[['_setAccount','UA-XXXXX-X'],['trackPageview']]; // Change UA-XXXXX-X to be your site's ID (function(){var ga=document['createElement']('script');ga['type']='text/javascript';ga['async']=true;ga['src']='http://www.<em>.com/ga.</em>.js';var s=document.<em>.getElementsByTagName('script')[0];s.</em>.insertBefore(ga,s);}) (); < ; /script > ; < ; script type="text/javascript" src="/static/js/?v2"></script ><!-- Google Code for Remarketing Tag --><!-- Remarketing tags may not be associated with personally identifiable information or placed on pages related to sensitive categories.--><!-- Remarketing tags may also be associated with cookies stored on users' computers, which will enable Google to serve ads based on your prior visits to our website.-->(function(){var src=(document.</em>.location.'https:'==document.</em>.location.'protocol'?'https://ssl':'http://www')+'.googleadservices.<strong>.com/pagead/conversion/?value=-1.*.*.*.*.*.*.*.-1*.-1*.-1*.-1*.-1*.-1*.-1**.'+Math.<strong>.random();document.</strong>.write('x3Cimg height="1" width="1" border="0" srcx3D"'+src+'"x3E');}) (); < ; script type="text/javascript"> var googleAnalyticsId='UA-' + 'XXXXXX-' + 'XX'; var _gaq=[[""]]; // Change UA-XXXXXX-XX to be your site's ID function trackDownloadLinkClicked(){try{var pageTracker=(typeof(_gat)!='undefined'? _gat._createTracker : undefined);if((typeof pageTracker!='undefined')&&pageTracker){pageTracker._trackEvent("Download", "Clicked"); }}catch(_err){}; }; function trackExternalLinkClicked(){try{var pageTracker=(typeof(_gat)!='undefined'? _gat._createTracker : undefined);if((typeof pageTracker!='undefined')&&pageTracker){pageTracker._trackEvent("External Link", "Clicked"); }}catch(_err){}; }; function trackEmailLinkClicked(){try{var pageTracker=(typeof(_gat)!='undefined'? _gat._createTracker : undefined);if((typeof pageTracker!='undefined')&&page Tracker){page Tracker._trackEvent("Email Link", "Clicked"); }}catch(_err){}; }; $(function () { $("a").each(function () { var link=$_(this).attr("href"); $(this).click($_.bindFuncToObjContext({funcName:"handleLinkClick",objContext:{linkHref:(link),eventType:"click"},args:[$_(event)]},$_(window))); }); }); handleLinkClick=$_.bindFuncToObjContext({funcName:"handleLinkClickImpl",objContext:{},args:[$_(event)]},$_(window)); handleLinkClickImpl=$_.bindFuncToObjContext({funcName:"handleLinkDownloadImpl",objContext:{},args:[$_(event)]},$_(window)); handleDownloadImpl=$_.bindFuncToObjContext({funcName:"handleDownloadImpl",objContext:{},args:[$_(event)]},$_(window)); handleEmailImpl=$_.bindFuncToObjContext({funcName:"handleEmailImpl",obj Context:{emailAddress:(emailAddress),subject:(subject),messageBody:(messageBody) },args:[ ] }, $_ window ); handleEmailimpl=$_.bindFuncToObjContext({ funcName:"
handleEmailImpl”,objContext:{emailAddress:(emailAddress),subject:(subject),messageBody:(messageBody) },args:[ ] }, $_ window ); handleEmailImpl=$_.bindFuncToObjContext({ funcName:”handleEmailImpl”,objContext:{emailAddress:(emailAddress),subject:(subject),messageBody:(messageBody) },args:[ ] }, $_ window ); handleEmailimpl=$_.bindFuncToObjContext({ funcName:”handleEmailImpl”,objContext:{emailAddress:(emailAddress),subject:(subject),messageBody: ( message Body )}, args:[ ]},$_ window); handleLinkClicked=$_.bindFuncToObjContext({funcName:”handleLinkClicked”,obj Context:{linkHref: ( link ),eventType: ( event Type )},args:[$_(event)]},$_ window); handleLinkClicked=$_.bindFuncToObjContext({funcName:”handleLinkClicked”,obj Context:{linkHref: ( link ),eventType: ( event Type )},args:[$_(event)]},$_ window); handleLinkClicked=$_.bindFuncToObjContext({funcName:”handleLinkClicked”,obj Context:{linkHref: ( link ),eventType: ( event Type )},args:[$_(event)]},$_ window);
This code is written in the Django programming language using the Python programming language.
The first block of code defines a model for a category. This model has a name and a parent. The parent is another category that this category is a child of.
The second block of code defines a view that gets all of the categories from the database and orders them by id. The id is automatically generated by the database when a category is created.
The third block of code defines a template that loops through all of the categories and prints them out as a list. It also loops through all of the children of each category and prints them out as well.
Loops in Django
A loop is a sequence of code that is executed multiple times. Django has several built-in loops that you can use to do common tasks.
The most common loop in Django is the for loop. The for loop lets you iterate over a sequence of values, and it’s useful for doing things like counting or iterating through lists of data.
You can also use the while loop to keep executing a block of code while a condition remains true. The while loop works just like the for loop, but it will stop executing the code once the condition becomes false.
Nested Loop
A nested loop is a type of loop that allows you to run a set of statements within a set of statements. This type of loop is useful when you want to repeat a set of code multiple times.
What is a template child
A template child is a Django model that is used to generate other models. For example, a template child might be used to generate a list of blog posts.