【发布时间】:2016-03-23 06:13:20
【问题描述】:
我正在尝试显示 ListView 的项目,单击这些项目会打开该项目的相应 DetailView。这在 Django 中是一件非常简单的事情,但我遇到了一些麻烦。
我已经成功创建了ListView,但我无法让DetailView 显示每个项目的信息。
我正在构建一个密码保险箱。 ListView 列出了所有保存的密码,DetailView 是每个密码的查看/编辑页面。是的,我意识到实际上将密码保险箱放在互联网上是一个糟糕的主意,这只是一个测试项目:)
我的PasswordSafe 班级:
class PasswordSafe(models.Model):
user = models.OneToOneField(User)
pwWebsite = models.CharField(max_length=30)
pwUsername = models.CharField(max_length=30)
pwEmail = models.CharField(max_length=30)
pwPassword = models.CharField(max_length=30)
def __unicode__(self): # __unicode__ on Python 2, __str__ on Python 3
return self.pwWebsite
User.passwordSafe = property(lambda u: PasswordSafe.objects.get_or_create(user=u)[0])
我的urls.py:
from django.conf.urls import patterns, include, url
from django.views.generic import ListView, DetailView
from models import PasswordSafe
urlpatterns = [
url(r'^passwordSafe/$', ListView.as_view(queryset=PasswordSafe.objects.all().order_by('-pwWebsite')[:10], template_name = 'userprofile/passwordSafe_list.html')),
url(r'^passwordSafe/(?P<pk>\d+)/$', DetailView.as_view(model=PasswordSafe, template_name='userprofile/passwordSafe.html')),
]
我在ListView 模板(passwordSafe_list.html)中成功使用了以下代码:
{% for passwordSafe in object_list %}
<h2><a href="/accounts/passwordSafe/{{passwordSafe.id}}">{{ passwordSafe.pwWebsite }}</a></h2>
{% endfor %}
但是,当我尝试在我的 Detailview(passwordSafe.html 模板)中使用 passwordSafe 数据时,什么也没有出现。我使用以下代码尝试更改标题:
<title>{% block title %} | Edit {{ passwordSafe.pwWebsite }} Password{% endblock %}</title>
这应该显示类似“密码安全 | 编辑 Google 密码”的标题,但 passwordSafe.pwWebsite 会返回任何内容。我在尝试从此模板中引用 passwordSafe 时做错了什么?我知道我没有像使用 ListView 那样通过查询集,但我不确定这是否是问题的一部分。
【问题讨论】:
标签: python django listview detailview