PageRenderTime 49ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/docs/reference/templatetags.html

https://bitbucket.org/forcreation/django-categories
HTML | 393 lines | 381 code | 12 blank | 0 comment | 0 complexity | 21536658e8ff923d5675dab95a0f9e60 MD5 | raw file
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Template tags and filters &mdash; Django Categories v1.1 documentation</title>
  7. <link rel="stylesheet" href="../_static/default.css" type="text/css" />
  8. <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
  9. <script type="text/javascript">
  10. var DOCUMENTATION_OPTIONS = {
  11. URL_ROOT: '../',
  12. VERSION: '1.1',
  13. COLLAPSE_INDEX: false,
  14. FILE_SUFFIX: '.html',
  15. HAS_SOURCE: true
  16. };
  17. </script>
  18. <script type="text/javascript" src="../_static/jquery.js"></script>
  19. <script type="text/javascript" src="../_static/underscore.js"></script>
  20. <script type="text/javascript" src="../_static/doctools.js"></script>
  21. <link rel="top" title="Django Categories v1.1 documentation" href="../index.html" />
  22. <link rel="up" title="Reference" href="index.html" />
  23. <link rel="prev" title="Settings" href="settings.html" />
  24. </head>
  25. <body>
  26. <div id="docstitle">
  27. <p>Django Categories v1.1 documentation</p>
  28. </div>
  29. <div id="header">
  30. <div id="title"><h1>Template tags and filters</h1></div>
  31. <ul id="headerButtons">
  32. <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
  33. <li id="page_buttons">
  34. <div class="headerButton"><a href="../genindex.html" title="General Index" accesskey="I">index</a></div>
  35. <div class="headerButton"><a href="settings.html" title="Settings" accesskey="P">previous</a></div>
  36. </li>
  37. </ul>
  38. </div>
  39. <div id="sphinxsidebar">
  40. <div class="sphinxsidebarwrapper">
  41. <ul><li class="toctree-l1"><a href="../index.html">Main Page</a></li></ul>
  42. <ul class="current">
  43. <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
  44. <li class="toctree-l1"><a class="reference internal" href="../getting_started.html">Getting Started</a></li>
  45. <li class="toctree-l1"><a class="reference internal" href="../usage.html">Using categories in templates</a></li>
  46. <li class="toctree-l1"><a class="reference internal" href="../registering_models.html">Registering Models</a></li>
  47. <li class="toctree-l1"><a class="reference internal" href="../adding_the_fields.html">Adding the fields to the database</a></li>
  48. <li class="toctree-l1"><a class="reference internal" href="../custom_categories.html">Creating Custom Categories</a></li>
  49. <li class="toctree-l1 current"><a class="reference internal" href="index.html">Reference</a><ul class="current">
  50. <li class="toctree-l2"><a class="reference internal" href="management_commands.html">Management Commands</a></li>
  51. <li class="toctree-l2"><a class="reference internal" href="models.html">Models</a></li>
  52. <li class="toctree-l2"><a class="reference internal" href="settings.html">Settings</a></li>
  53. <li class="toctree-l2 current"><a class="current reference internal" href="">Template tags and filters</a></li>
  54. </ul>
  55. </li>
  56. </ul>
  57. <h3>This Page</h3>
  58. <ul class="this-page-menu">
  59. <li><a href="../_sources/reference/templatetags.txt"
  60. rel="nofollow">Show Source</a></li>
  61. </ul>
  62. <div id="searchbox" style="display: none">
  63. <form class="search" action="../search.html" method="get">
  64. <div class="search-wrapper">
  65. <span class="search-left"></span>
  66. <input class="prettysearch" type="text" name="q" size="18" />
  67. <span class="search-right">&nbsp;</span>
  68. </div>
  69. <input type="submit" value="Search" class="searchbutton" />
  70. <input type="hidden" name="check_keywords" value="yes" />
  71. <input type="hidden" name="area" value="default" />
  72. </form>
  73. <p class="searchtip" style="font-size: 90%">
  74. Enter search terms or a module, class or function name.
  75. </p>
  76. </div>
  77. <script type="text/javascript">$('#searchbox').show(0);</script>
  78. </div>
  79. </div>
  80. <div class="document">
  81. <div class="documentwrapper">
  82. <div class="bodywrapper">
  83. <div class="body">
  84. <div class="section" id="template-tags-and-filters">
  85. <h1>Template tags and filters<a class="headerlink" href="#template-tags-and-filters" title="Permalink to this headline"></a></h1>
  86. <div class="contents local topic" id="contents">
  87. <ul class="simple">
  88. <li><a class="reference internal" href="#filters" id="id2">Filters</a><ul>
  89. <li><a class="reference internal" href="#category-path" id="id3"><tt class="docutils literal"><span class="pre">category_path</span></tt></a></li>
  90. <li><a class="reference internal" href="#tree-info" id="id4"><tt class="docutils literal"><span class="pre">tree_info</span></tt></a></li>
  91. <li><a class="reference internal" href="#tree-queryset" id="id5"><tt class="docutils literal"><span class="pre">tree_queryset</span></tt></a></li>
  92. </ul>
  93. </li>
  94. <li><a class="reference internal" href="#inclusion-tags" id="id6">Inclusion tags</a><ul>
  95. <li><a class="reference internal" href="#display-path-as-ul" id="id7"><tt class="docutils literal"><span class="pre">display_path_as_ul</span></tt></a></li>
  96. <li><a class="reference internal" href="#display-drilldown-as-ul" id="id8"><tt class="docutils literal"><span class="pre">display_drilldown_as_ul</span></tt></a></li>
  97. <li><a class="reference internal" href="#breadcrumbs-tag" id="id9"><tt class="docutils literal"><span class="pre">breadcrumbs</span> <span class="pre">tag</span></tt></a></li>
  98. </ul>
  99. </li>
  100. <li><a class="reference internal" href="#template-tags" id="id10">Template Tags</a><ul>
  101. <li><a class="reference internal" href="#get-top-level-categories" id="id11"><tt class="docutils literal"><span class="pre">get_top_level_categories</span></tt></a></li>
  102. <li><a class="reference internal" href="#get-category-drilldown" id="id12"><tt class="docutils literal"><span class="pre">get_category_drilldown</span></tt></a></li>
  103. <li><a class="reference internal" href="#recursetree" id="id13"><tt class="docutils literal"><span class="pre">recursetree</span></tt></a></li>
  104. </ul>
  105. </li>
  106. </ul>
  107. </div>
  108. <div class="section" id="filters">
  109. <h2><a class="toc-backref" href="#contents">Filters</a><a class="headerlink" href="#filters" title="Permalink to this headline"></a></h2>
  110. <div class="section" id="category-path">
  111. <h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">category_path</span></tt></a><a class="headerlink" href="#category-path" title="Permalink to this headline"></a></h3>
  112. <p><strong>Optional Parameter:</strong> separator string. <em>Default:</em> <tt class="docutils literal"><span class="pre">&quot;</span> <span class="pre">::</span> <span class="pre">&quot;</span></tt></p>
  113. <p>Creates a path represented by a categories by joining the items with a separator.</p>
  114. <p>Each path item will be coerced to unicode, so you can pass a list of category instances, if required.</p>
  115. <p><strong>Example using a list of categories:</strong></p>
  116. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{{</span> <span class="nv">some_list</span><span class="o">|</span><span class="nf">category_path</span> <span class="cp">}}</span><span class="x"></span>
  117. </pre></div>
  118. </div>
  119. <p>If <tt class="docutils literal"><span class="pre">some_list</span></tt> is <tt class="docutils literal"><span class="pre">[</span> <span class="pre">&lt;Category:</span> <span class="pre">Country&gt;,</span> <span class="pre">&lt;Category:</span> <span class="pre">Country</span> <span class="pre">pop&gt;,</span> <span class="pre">&lt;Category:</span> <span class="pre">Urban</span> <span class="pre">Cowboy&gt;]</span></tt> the result will be:</p>
  120. <div class="highlight-python"><pre>Country :: Country pop :: Urban Cowboy</pre>
  121. </div>
  122. <p><strong>Example using a category node and optional separator parameter:</strong></p>
  123. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{{</span> <span class="nv">some_node.get_ancestors</span><span class="o">|</span><span class="nf">category_path</span><span class="s2">:&quot; &gt; &quot;</span> <span class="cp">}}</span><span class="x"></span>
  124. </pre></div>
  125. </div>
  126. <p>If <tt class="docutils literal"><span class="pre">some_node</span></tt> was category &#8220;Urban Cowboy&#8221;, the result will be:</p>
  127. <div class="highlight-python"><pre>Country &gt; Country pop &gt; Urban Cowboy</pre>
  128. </div>
  129. </div>
  130. <div class="section" id="tree-info">
  131. <span id="id1"></span><h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">tree_info</span></tt></a><a class="headerlink" href="#tree-info" title="Permalink to this headline"></a></h3>
  132. <p><strong>Optional Parameter:</strong> <tt class="docutils literal"><span class="pre">&quot;ancestors&quot;</span></tt></p>
  133. <p>Given a list of categories, it iterates over the list, generating a tuple of the current category and a dict containing information about the tree structure around it, with the following keys:</p>
  134. <dl class="docutils">
  135. <dt><tt class="docutils literal"><span class="pre">'new_level'</span></tt></dt>
  136. <dd><tt class="xref docutils literal"><span class="pre">True</span></tt> if the current item is the start of a new level in the tree, <tt class="xref docutils literal"><span class="pre">False</span></tt> otherwise.</dd>
  137. <dt><tt class="docutils literal"><span class="pre">'closed_levels'</span></tt></dt>
  138. <dd>A list of levels which end after the current item. This will be an empty list if the next category&#8217;s level is the same as or greater than the level of the current item.</dd>
  139. </dl>
  140. <p>Provide the optional argument, <tt class="docutils literal"><span class="pre">&quot;ancestors&quot;</span></tt>, to add a list of unicode representations of the ancestors of the current category, in descending order (root node first, immediate parent last), under the key &#8216;ancestors&#8217;.</p>
  141. <p>For example: given the sample tree below, the contents of the list which would be available under the &#8216;ancestors&#8217; key are given on the right:</p>
  142. <div class="highlight-python"><pre>Country -&gt; []
  143. Country pop -&gt; [u'Country pop']
  144. Urban Cowboy -&gt; [u'Country', u'Country pop']</pre>
  145. </div>
  146. <p>Using this filter with unpacking in a {% for %} tag, you should have enough information about the tree structure to create a hierarchical representation of the tree.</p>
  147. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">for</span> <span class="nv">node</span><span class="o">,</span><span class="nv">structure</span> <span class="k">in</span> <span class="nv">objects</span><span class="o">|</span><span class="nf">tree_info</span> <span class="cp">%}</span><span class="x"></span>
  148. <span class="x"> </span><span class="cp">{%</span> <span class="k">if</span> <span class="nv">structure.new_level</span> <span class="cp">%}</span><span class="x">&lt;ul&gt;&lt;li&gt;</span><span class="cp">{%</span> <span class="k">else</span> <span class="cp">%}</span><span class="x">&lt;/li&gt;&lt;li&gt;</span><span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
  149. <span class="x"> </span><span class="cp">{{</span> <span class="nv">node.name</span> <span class="cp">}}</span><span class="x"></span>
  150. <span class="x"> </span><span class="cp">{%</span> <span class="k">for</span> <span class="nv">level</span> <span class="k">in</span> <span class="nv">structure.closed_levels</span> <span class="cp">%}</span><span class="x">&lt;/li&gt;&lt;/ul&gt;</span><span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
  151. <span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
  152. </pre></div>
  153. </div>
  154. </div>
  155. <div class="section" id="tree-queryset">
  156. <h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">tree_queryset</span></tt></a><a class="headerlink" href="#tree-queryset" title="Permalink to this headline"></a></h3>
  157. <p>Convert a regular category <tt class="xref py py-class docutils literal"><span class="pre">QuerySet</span></tt> into a new, ordered <tt class="xref py py-class docutils literal"><span class="pre">QuerySet</span></tt> that includes the categories selected and their ancestors.</p>
  158. <p>This is especially helpful when you have a subset of categories and want to show the hierarchy for all the items.</p>
  159. <p>For example, if we add it to the example for <a class="reference internal" href="#tree-info"><em>tree_info</em></a>:</p>
  160. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">for</span> <span class="nv">node</span><span class="o">,</span><span class="nv">structure</span> <span class="k">in</span> <span class="nv">objects</span><span class="o">|</span><span class="nf">tree_queryset</span><span class="o">|</span><span class="nf">tree_info</span> <span class="cp">%}</span><span class="x"></span>
  161. <span class="x"> </span><span class="cp">{%</span> <span class="k">if</span> <span class="nv">structure.new_level</span> <span class="cp">%}</span><span class="x">&lt;ul&gt;&lt;li&gt;</span><span class="cp">{%</span> <span class="k">else</span> <span class="cp">%}</span><span class="x">&lt;/li&gt;&lt;li&gt;</span><span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
  162. <span class="x"> </span><span class="cp">{{</span> <span class="nv">node.name</span> <span class="cp">}}</span><span class="x"></span>
  163. <span class="x"> </span><span class="cp">{%</span> <span class="k">for</span> <span class="nv">level</span> <span class="k">in</span> <span class="nv">structure.closed_levels</span> <span class="cp">%}</span><span class="x">&lt;/li&gt;&lt;/ul&gt;</span><span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
  164. <span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
  165. </pre></div>
  166. </div>
  167. <p>A list of unrelated categories such as <tt class="docutils literal"><span class="pre">[&lt;Category:</span> <span class="pre">Urban</span> <span class="pre">cowboy&gt;,</span> <span class="pre">&lt;Category:</span> <span class="pre">Urban</span> <span class="pre">comtemporary&gt;]</span></tt>, the above template example will output the two categories and their ancestors:</p>
  168. <div class="highlight-html"><div class="highlight"><pre><span class="nt">&lt;ul&gt;&lt;li&gt;</span>
  169. Country
  170. <span class="nt">&lt;ul&gt;&lt;li&gt;</span>
  171. Country pop
  172. <span class="nt">&lt;ul&gt;&lt;li&gt;</span>
  173. Urban cowboy
  174. <span class="nt">&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</span>
  175. <span class="nt">&lt;ul&gt;&lt;li&gt;</span>
  176. Rhythm and blues
  177. <span class="nt">&lt;ul&gt;&lt;li&gt;</span>
  178. Urban contemporary
  179. <span class="nt">&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</span>
  180. </pre></div>
  181. </div>
  182. <div class="admonition note">
  183. <p class="first admonition-title">Note</p>
  184. <p class="last">Categories that have similar ancestors are grouped accordingly. There is no duplication of the ancestor tree.</p>
  185. </div>
  186. </div>
  187. </div>
  188. <div class="section" id="inclusion-tags">
  189. <h2><a class="toc-backref" href="#contents">Inclusion tags</a><a class="headerlink" href="#inclusion-tags" title="Permalink to this headline"></a></h2>
  190. <div class="section" id="display-path-as-ul">
  191. <h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">display_path_as_ul</span></tt></a><a class="headerlink" href="#display-path-as-ul" title="Permalink to this headline"></a></h3>
  192. <p><strong>Template Rendered:</strong> <tt class="docutils literal"><span class="pre">categories/ul_tree.html</span></tt></p>
  193. <p><strong>Syntax 1:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">display_path_as_ul</span> <span class="pre">&lt;category_obj&gt;</span> <span class="pre">%}</span></tt></p>
  194. <p><strong>Syntax 2:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">display_path_as_ul</span> <span class="pre">&lt;path_string&gt;[</span> <span class="pre">using=&quot;app.Model&quot;]</span> <span class="pre">%}</span></tt></p>
  195. <p>Render the category with ancestors, but no children.</p>
  196. <p>Pass either an object that subclasses <a class="reference internal" href="models.html#CategoryBase" title="CategoryBase"><tt class="xref py py-class docutils literal"><span class="pre">CategoryBase</span></tt></a> or a path string for the category. Add <tt class="docutils literal"><span class="pre">using=&quot;app.Model&quot;</span></tt> to specify which model when using a path string. The default model used is <a class="reference internal" href="models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a>.</p>
  197. <p><strong>Example, using Category model:</strong></p>
  198. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_path_as_ul</span> <span class="s2">&quot;/Grandparent/Parent&quot;</span> <span class="cp">%}</span><span class="x"></span>
  199. </pre></div>
  200. </div>
  201. <p><strong>Example, using custom model:</strong></p>
  202. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_path_as_ul</span> <span class="s2">&quot;/Grandparent/Parent&quot;</span> <span class="nv">using</span><span class="o">=</span><span class="s2">&quot;coolapp.MusicGenre&quot;</span> <span class="cp">%}</span><span class="x"></span>
  203. </pre></div>
  204. </div>
  205. <p><strong>Example, using an object:</strong></p>
  206. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_path_as_ul</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
  207. </pre></div>
  208. </div>
  209. <p>Returns:</p>
  210. <div class="highlight-html"><div class="highlight"><pre><span class="nt">&lt;ul&gt;</span>
  211. <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/&quot;</span><span class="nt">&gt;</span>Top<span class="nt">&lt;/a&gt;</span>
  212. <span class="nt">&lt;ul&gt;</span>
  213. <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/grandparent/&quot;</span><span class="nt">&gt;</span>Grandparent<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  214. <span class="nt">&lt;/ul&gt;</span>
  215. <span class="nt">&lt;/li&gt;</span>
  216. <span class="nt">&lt;/ul&gt;</span>
  217. </pre></div>
  218. </div>
  219. </div>
  220. <div class="section" id="display-drilldown-as-ul">
  221. <h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">display_drilldown_as_ul</span></tt></a><a class="headerlink" href="#display-drilldown-as-ul" title="Permalink to this headline"></a></h3>
  222. <p><strong>Template rendered:</strong> <tt class="docutils literal"><span class="pre">categories/ul_tree.html</span></tt></p>
  223. <p><strong>Syntax 1:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">display_drilldown_as_ul</span> <span class="pre">category_obj</span> <span class="pre">%}</span></tt></p>
  224. <p><strong>Syntax 2:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">display_drilldown_as_ul</span> <span class="pre">&quot;/Grandparent/Parent&quot;</span> <span class="pre">[using=&quot;app.Model&quot;]</span> <span class="pre">%}</span></tt></p>
  225. <p>Render the category with ancestors and children.</p>
  226. <p><strong>Example, using Category model:</strong></p>
  227. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_drilldown_as_ul</span> <span class="s2">&quot;/Grandparent/Parent&quot;</span> <span class="cp">%}</span><span class="x"></span>
  228. </pre></div>
  229. </div>
  230. <p><strong>Example, using custom model:</strong></p>
  231. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_drilldown_as_ul</span> <span class="s2">&quot;/Grandparent/Parent&quot;</span> <span class="nv">using</span><span class="o">=</span><span class="s2">&quot;coolapp.MusicGenre&quot;</span> <span class="cp">%}</span><span class="x"></span>
  232. </pre></div>
  233. </div>
  234. <p><strong>Example, using an object:</strong></p>
  235. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_drilldown_as_ul</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
  236. </pre></div>
  237. </div>
  238. <p>Returns:</p>
  239. <div class="highlight-html"><div class="highlight"><pre><span class="nt">&lt;ul&gt;</span>
  240. <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/&quot;</span><span class="nt">&gt;</span>Top<span class="nt">&lt;/a&gt;</span>
  241. <span class="nt">&lt;ul&gt;</span>
  242. <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/grandparent/&quot;</span><span class="nt">&gt;</span>Grandparent<span class="nt">&lt;/a&gt;</span>
  243. <span class="nt">&lt;ul&gt;</span>
  244. <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/grandparent/parent/&quot;</span><span class="nt">&gt;</span>Parent<span class="nt">&lt;/a&gt;</span>
  245. <span class="nt">&lt;ul&gt;</span>
  246. <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/grandparent/parent/child1&quot;</span><span class="nt">&gt;</span>Child1<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  247. <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/grandparent/parent/child2&quot;</span><span class="nt">&gt;</span>Child2<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  248. <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/grandparent/parent/child3&quot;</span><span class="nt">&gt;</span>Child3<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  249. <span class="nt">&lt;/ul&gt;</span>
  250. <span class="nt">&lt;/li&gt;</span>
  251. <span class="nt">&lt;/ul&gt;</span>
  252. <span class="nt">&lt;/li&gt;</span>
  253. <span class="nt">&lt;/ul&gt;</span>
  254. <span class="nt">&lt;/li&gt;</span>
  255. <span class="nt">&lt;/ul&gt;</span>
  256. </pre></div>
  257. </div>
  258. </div>
  259. <div class="section" id="breadcrumbs-tag">
  260. <h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">breadcrumbs</span> <span class="pre">tag</span></tt></a><a class="headerlink" href="#breadcrumbs-tag" title="Permalink to this headline"></a></h3>
  261. <p><strong>Template rendered:</strong> <tt class="docutils literal"><span class="pre">categories/breadcrumbs.html</span></tt></p>
  262. <p><strong>Syntax 1:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">breadcrumbs</span> <span class="pre">category_obj</span> <span class="pre">[separator=&quot;</span> <span class="pre">::</span> <span class="pre">&quot;]</span> <span class="pre">%}</span></tt></p>
  263. <p><strong>Syntax 2:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">breadcrumbs</span> <span class="pre">&quot;/Grandparent/Parent&quot;</span> <span class="pre">[separator=&quot;</span> <span class="pre">::</span> <span class="pre">&quot;]</span> <span class="pre">[using=&quot;app.Model&quot;]</span> <span class="pre">%}</span></tt></p>
  264. <p>Render breadcrumbs for the given path using <tt class="docutils literal"><span class="pre">::</span></tt> or the given separator.</p>
  265. <p><strong>Example using Category model:</strong></p>
  266. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="s2">&quot;/Grandparent/Parent&quot;</span> <span class="cp">%}</span><span class="x"></span>
  267. </pre></div>
  268. </div>
  269. <p><strong>Example using a custom model:</strong></p>
  270. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="s2">&quot;/Grandparent/Parent&quot;</span> <span class="nv">using</span><span class="o">=</span><span class="s2">&quot;coolapp.MusicGenre&quot;</span> <span class="cp">%}</span><span class="x"></span>
  271. </pre></div>
  272. </div>
  273. <p><strong>Example using an object:</strong></p>
  274. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
  275. </pre></div>
  276. </div>
  277. <p>Returns:</p>
  278. <div class="highlight-html"><div class="highlight"><pre><span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/grandparent/&quot;</span><span class="nt">&gt;</span>Grandparent<span class="nt">&lt;/a&gt;</span> / Parent
  279. </pre></div>
  280. </div>
  281. <p>You can alter the separator used in the template by adding a separator argument:</p>
  282. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="nv">category_obj</span> <span class="nv">separator</span><span class="o">=</span><span class="s2">&quot; &amp;gt; &quot;</span> <span class="cp">%}</span><span class="x"></span>
  283. </pre></div>
  284. </div>
  285. <p>Returns:</p>
  286. <div class="highlight-html"><div class="highlight"><pre><span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;/categories/grandparent/&quot;</span><span class="nt">&gt;</span>Grandparent<span class="nt">&lt;/a&gt;</span> <span class="ni">&amp;gt;</span> Parent
  287. </pre></div>
  288. </div>
  289. </div>
  290. </div>
  291. <div class="section" id="template-tags">
  292. <h2><a class="toc-backref" href="#contents">Template Tags</a><a class="headerlink" href="#template-tags" title="Permalink to this headline"></a></h2>
  293. <div class="section" id="get-top-level-categories">
  294. <h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">get_top_level_categories</span></tt></a><a class="headerlink" href="#get-top-level-categories" title="Permalink to this headline"></a></h3>
  295. <p>Retrieves an alphabetical list of all the categories that have no parents.</p>
  296. <p>Syntax:</p>
  297. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_top_level_categories</span> <span class="o">[</span><span class="nv">using</span> <span class="s2">&quot;app.Model&quot;</span><span class="o">]</span> <span class="k">as</span> <span class="nv">categories</span> <span class="cp">%}</span><span class="x"></span>
  298. </pre></div>
  299. </div>
  300. <p>Returns an list of categories <tt class="docutils literal"><span class="pre">[&lt;category&gt;,</span> <span class="pre">&lt;category&gt;,</span> <span class="pre">&lt;category,</span> <span class="pre">...]</span></tt></p>
  301. </div>
  302. <div class="section" id="get-category-drilldown">
  303. <h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">get_category_drilldown</span></tt></a><a class="headerlink" href="#get-category-drilldown" title="Permalink to this headline"></a></h3>
  304. <p><strong>Syntax 1:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">get_category_drilldown</span> <span class="pre">&lt;path_string&gt;</span> <span class="pre">[using</span> <span class="pre">&quot;app.Model&quot;]</span> <span class="pre">as</span> <span class="pre">&lt;varname&gt;</span> <span class="pre">%}</span></tt></p>
  305. <p><strong>Syntax 2:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">get_category_drilldown</span> <span class="pre">&lt;object&gt;</span> <span class="pre">as</span> <span class="pre">&lt;varname&gt;</span> <span class="pre">%}</span></tt></p>
  306. <p>Retrieves the specified category, its ancestors and its immediate children as an iterable. Syntax 1 allows for the retrieval of the category object via a slash-delimited path. The optional <tt class="docutils literal"><span class="pre">using</span> <span class="pre">&quot;app.Model&quot;</span></tt> allows you to specify from which model to retrieve the object.</p>
  307. <p>Example:</p>
  308. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_category_drilldown</span> <span class="s2">&quot;/Grandparent/Parent&quot;</span> <span class="nv">using</span> <span class="s2">&quot;family.Member&quot;</span> <span class="k">as</span> <span class="nv">family</span> <span class="cp">%}</span><span class="x"></span>
  309. </pre></div>
  310. </div>
  311. <p>The second syntax uses an instance of any object that subclasses <a class="reference internal" href="models.html#CategoryBase" title="CategoryBase"><tt class="xref py py-class docutils literal"><span class="pre">CategoryBase</span></tt></a></p>
  312. <div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_category_drilldown</span> <span class="nv">category_obj</span> <span class="k">as</span> <span class="nv">family</span> <span class="cp">%}</span><span class="x"></span>
  313. </pre></div>
  314. </div>
  315. <p>Both examples sets <tt class="docutils literal"><span class="pre">family</span></tt> to:</p>
  316. <div class="highlight-python"><pre>[Grandparent, Parent, Child 1, Child 2, Child n]</pre>
  317. </div>
  318. </div>
  319. <div class="section" id="recursetree">
  320. <h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">recursetree</span></tt></a><a class="headerlink" href="#recursetree" title="Permalink to this headline"></a></h3>
  321. <p>This tag renders a section of your template recursively for each node in your
  322. tree.</p>
  323. <p>For example:</p>
  324. <div class="highlight-django"><div class="highlight"><pre><span class="x">&lt;ul class=&quot;root&quot;&gt;</span>
  325. <span class="x"> </span><span class="cp">{%</span> <span class="k">recursetree</span> <span class="nv">nodes</span> <span class="cp">%}</span><span class="x"></span>
  326. <span class="x"> &lt;li&gt;</span>
  327. <span class="x"> </span><span class="cp">{{</span> <span class="nv">node.name</span> <span class="cp">}}</span><span class="x"></span>
  328. <span class="x"> </span><span class="cp">{%</span> <span class="k">if</span> <span class="k">not</span> <span class="nv">node.is_leaf_node</span> <span class="cp">%}</span><span class="x"></span>
  329. <span class="x"> &lt;ul class=&quot;children&quot;&gt;</span>
  330. <span class="x"> </span><span class="cp">{{</span> <span class="nv">children</span> <span class="cp">}}</span><span class="x"></span>
  331. <span class="x"> &lt;/ul&gt;</span>
  332. <span class="x"> </span><span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
  333. <span class="x"> &lt;/li&gt;</span>
  334. <span class="x"> </span><span class="cp">{%</span> <span class="k">endrecursetree</span> <span class="cp">%}</span><span class="x"></span>
  335. <span class="x">&lt;/ul&gt;</span>
  336. </pre></div>
  337. </div>
  338. <p>Note the special variables <tt class="docutils literal"><span class="pre">node</span></tt> and <tt class="docutils literal"><span class="pre">children</span></tt>.
  339. These are magically inserted into your context while you&#8217;re inside the
  340. <tt class="docutils literal"><span class="pre">recursetree</span></tt> tag.</p>
  341. <blockquote>
  342. <div><p><tt class="docutils literal"><span class="pre">node</span></tt> is an instance of your MPTT model.</p>
  343. <p><tt class="docutils literal"><span class="pre">children</span></tt> : This variable holds the rendered HTML for the children of
  344. <tt class="docutils literal"><span class="pre">node</span></tt>.</p>
  345. </div></blockquote>
  346. <div class="admonition note">
  347. <p class="first admonition-title">Note</p>
  348. <p>If you already have variables called <tt class="docutils literal"><span class="pre">node</span></tt> or <tt class="docutils literal"><span class="pre">children</span></tt> in your
  349. template, and you need to access them inside the <tt class="docutils literal"><span class="pre">recursetree</span></tt> block,
  350. you&#8217;ll need to alias them to some other name first:</p>
  351. <div class="last highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">with</span> <span class="nv">node</span> <span class="k">as</span> <span class="nv">friendly_node</span> <span class="cp">%}</span><span class="x"></span>
  352. <span class="x"> </span><span class="cp">{%</span> <span class="k">recursetree</span> <span class="nv">nodes</span> <span class="cp">%}</span><span class="x"></span>
  353. <span class="x"> </span><span class="cp">{{</span> <span class="nv">node.name</span> <span class="cp">}}</span><span class="x"> is friends with </span><span class="cp">{{</span> <span class="nv">friendly_node.name</span> <span class="cp">}}</span><span class="x"></span>
  354. <span class="x"> </span><span class="cp">{{</span> <span class="nv">children</span> <span class="cp">}}</span><span class="x"></span>
  355. <span class="x"> </span><span class="cp">{%</span> <span class="k">endrecursetree</span> <span class="cp">%}</span><span class="x"></span>
  356. <span class="cp">{%</span> <span class="k">endwith</span> <span class="cp">%}</span><span class="x"></span>
  357. </pre></div>
  358. </div>
  359. </div>
  360. </div>
  361. </div>
  362. </div>
  363. </div>
  364. </div>
  365. </div>
  366. <div class="footer">
  367. <p>
  368. &copy; Copyright 2010-2012, Corey Oordt.
  369. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
  370. </p>
  371. </div>
  372. <div class="clearer"></div>
  373. </div>
  374. <div id="breadcrumbs">
  375. <a href="index.html" accesskey="U">Reference</a><img src="../_static/triangle_closed.png" height="9" width="9" alt="&gt;">
  376. Template tags and filters
  377. </ul>
  378. </div>
  379. <script type="text/javascript" charset="utf-8" src="../_static/toc.js"></script>
  380. </body>
  381. </html>