Fix output of documents list for projects: show only docs for given project.

ILYA PORTNOV [2008-06-20 08:54:03]
Fix output of documents list for projects: show only docs for given project.
Filename
mgmt/templatetags/prj_filters.py
templates/project_docs.html
diff --git a/mgmt/templatetags/prj_filters.py b/mgmt/templatetags/prj_filters.py
index 2a93692..aaac4d5 100644
--- a/mgmt/templatetags/prj_filters.py
+++ b/mgmt/templatetags/prj_filters.py
@@ -11,6 +11,8 @@ import sys
 from os.path import dirname
 sys.path.append(dirname(__file__))

+from projects.mgmt.models import Document
+
 @register.filter('link')
 def link(obj,type='projects'):
   return "<a href='%s/%s/%s/'>%s</a>" % (settings.BASE_URL,type,obj.id,obj.name)
@@ -53,3 +55,26 @@ def form(parser,token):
     return FormNode(cs[1],cs[2])
   msg = "`form` tag syntax: {\% form form-object [additional-fields] \%}"
   raise template.TemplateSyntaxError(msg)
+
+class DocsNode(template.Node):
+  def __init__(self,project,category,name):
+    self.project = project
+    self.category = category
+    self.name = name
+
+  def render(self,context):
+    prj=context[self.project]
+    cat=context[self.category]
+    docs = Document.objects.filter(category=cat, project=prj)
+    context[self.name] = docs
+    return ''
+
+@register.tag
+def category_documents(parser,token):
+  cs = token.split_contents()
+  l = len(cs)
+  if l != 5 or cs[3] != 'as':
+    raise template.TemplateSyntaxError("`category_documents` syntax: category_documents project category as name")
+  return DocsNode(cs[1],cs[2],cs[4])
+
+
diff --git a/templates/project_docs.html b/templates/project_docs.html
index 88a78e5..f85c54c 100644
--- a/templates/project_docs.html
+++ b/templates/project_docs.html
@@ -10,7 +10,8 @@
     {% for cat in categories %}
       <h3>{{cat.title}}:</h3>
       <ul class='documents'>
-      {% for doc in cat.document_set.all %}
+      {% category_documents project cat as docs %}
+      {% for doc in docs %}
         <li><a href='{% url mgmt.views.one_document doc.id %}'>{{doc.name}}</a></li>
       {% endfor %}
       </ul>
ViewGit