一次在页面上显示一个Django数据库对象

时间:2015-08-11 13:15:16

标签: python django

我正处于项目的早期阶段,想知道这是否可行:

我的数据库中有10个对象代表一个人(身份,姓名,年龄,性别,位置)。我想做的是在自己的页面上显示每个人的自定义网址(example.com/person/1,example.com/person/2等)。

我的模型和视图可以在一个页面上同时显示所有人。我怎样才能重写这个以便一次在一个页面上显示一个人?

这是我的模特:

class Person(models.Model):
    id = models.IntegerField()
    name = models.CharField(max_length=120)
    age = models.IntegerField()
    sex = models.CharField(max_length=120)
    location = models.CharField(max_length=120)

    def __unicode__(self):
        return "%r, %s, %s, %s, %s, %s" % (self.id, self.name, self.age, self.sex, self.location)

以下是我的观点:

def person(request):
    person_info = Person.objects.all()
    person_data = {
        "person_detail" : person_info
    }
    return render(request, 'index.html', person_data)

我是Django的新手,如果我错过了一个明显的答案,我会道歉。

3 个答案:

答案 0 :(得分:2)

当您尝试显示特定的配置文件时,views.py文件必须带参数。

试试这个:

def person(request, id):
    person = Person.objects.get(pk=id)
    return render(request, 'person/index.html', {'person': person, })

应该这样做。

此外,您必须在urls.py文件中添加一个条目

url(r'/person/(?P<id>\d+)/$', views.person),

答案 1 :(得分:0)

是的,你可以做到。

您所要做的就是:修改您的urls.py以使用参数定义URL,在视图中提取该参数(它将作为参数或关键字参数传递给视图)并提取一个人,使用get或filter而不是所有

答案 2 :(得分:0)

只是一个例子

您需要再创建一个名为example&#34; profile_data&#34;

的函数

views.py

def profile_data(request,userid)
    person_info = Person.objects.get(id=userid)
    person_data = {
    "person_detail" : person_info
     }
    return render(request, 'profile.html', person_data)

url.py

url(r'^profile/(?P<userid>\d+)/$', app.views.profile)

您需要将userid传递给该网址,这样您就可以获得该特定用户的详细信息。