用于存储和显示特定于用户的状态的正确方法

时间:2012-03-27 14:49:19

标签: python django django-models

我有一个页面列出了用户完成的问题(在C编程中:-))。比方说,有10个,每个登录用户都可以访问这些。

要显示的页面是这样的:

<table>
<tr>
<th>Test desc</th>
<th>Test state</th>
</tr>
{% for t in test%}
<tr>
<td>{{ t.desc }}</td>
<td>'display a image  if it is completed else another image'</td>
</tr>
{% endfor %}
</table>

用户将从views.py

转发到此页面
def test(request):
    cProblems = Problems_c.objects.all()
    return render_to_response('subject/test.html', {'list':cProblems})

我需要知道两件事。

  1. 如何在django中存储此附加用户特定信息。
  2. 如何在网页中显示

1 个答案:

答案 0 :(得分:1)

首先,请使用render()而不是render_to_response()。这样可以避免常见问题。

  

如何在django中存储此附加用户特定信息

请参阅有关storing additional user information的文档。

  

如何在网页中显示它们

您可以使用通用DetailView

  1. 在urls.py中导入DetailView ,即from django.views import generic

  2. 在urls.py中导入用户模型,即from django.contrib.auth.models import User

  3. 在urls.py中添加网址,即url(r'^/user/(?P<pk>\d+)/$', views.DetailView.as_view({'model': user, 'context_object_name': 'object'}))

  4. 在templates / auth / user_detail.html中创建模板

  5. 打开网址/用户/ 1 / 查看呈现的模板

  6. 您的模板可能如下所示:

    <h1>This is the page of {{ object.username }}</h1>
    
    <p>Additional info: {{ object.get_profile.your_extra_field }}</p>
    

    当然,您应该有一个基本模板,例如模板/ base.html,如下所示:

    <html>
        <head>
            <title>{% block head_title %}{% endblock %} - your website</title>
        </head>
        <body>
            {% block body %}
            {% endblock %}
        </body>
    </html>
    

    您的user_detail.html模板应该使用它,请参阅template inheritance

    {% extends 'templates/base.html' %}
    
    {% block head_title %}Details of {{ object.username }}{% endblock %}
    
    {% block body %}
    <h1>This is the page of {{ object.username }}</h1>
    
    <p>Additional info: {{ object.get_profile.your_extra_field }}</p>
    {% endblock %}
    

    由于您刚接触Django,我强烈建议您安装admindoc,它会根据您的项目提供自动生成的文档。