在基本模板中呈现用户的项目

时间:2013-03-02 00:56:49

标签: django django-models

我正在开发一个项目管理应用程序。在每个页面(所有项目,新项目,编辑项目等)上,我希望用户的项目出现在基本模板的侧边栏中。

在基本模板的侧栏中,我有以下代码用于呈现用户的项目:

  <h5>Your projects</h5>
  {% for project in user.projects.all %}
      {{ project }}<br/>
  {% endfor %}

但是,这只会呈现一个项目,而不是所有项目。那是为什么?

项目模型:

class Project(models.Model):
    name = models.CharField(max_length = 50)
    ... the rest of the fields ...
    added_by_user = models.ForeignKey(User)
    users = models.ManyToManyField(User, related_name='projects')

    def __unicode__(self):
        return self.name

    def owned_by_user(self, user):
        return self.added_by_user == user

1 个答案:

答案 0 :(得分:0)

通常这是在视图中完成的,我喜欢使用render_to_response。如果您已经使用了许多视图,并且只想包含此信息,则可以将信息添加到视图中。您可以根据需要在render_to_response

中传递尽可能多的数据

views.py

from django.shortcuts import render_to_response

def some_view(request,user_id):
    # other queries
    project_listing = Project.objects.filter(user = user_id): 
    return render_to_response('sometemplate.html', {"someother_query":someother_query,"project_listing":project_listing,}

模板/ project_list.html

<h5>Your projects</h5>
<table>  
{% for project in project_listing %}
    <tr>
        <td>Project Name</td>
        <td>{{ project.name }}</td>
    </tr>
    .... repeat as necessary for each element 
{% endfor %}
</table> 

模板/ sometemplate.html

... other elements
{% include 'project_list.html' %}
... other elements