0

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

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

  <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
4

1 回答 1

0

通常这是在视图中完成的,我喜欢使用 render_to_response。如果您已经在使用多个视图并且只想包含此信息,则可以将信息添加到视图中。您可以在 render_to_response 中传递尽可能多或尽可能少的数据

视图.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
于 2013-03-02T01:30:09.547 回答