如何获取Django视图以查找模型的自我属性

时间:2016-02-18 16:14:24

标签: python django

我正在组建一个网站,其中包含组织中的人员目录。在模型中,一个人有一个name属性,然后用于为URL自动创建一个slug,如下所示,这实际上只是将他们的名字改为“FirstnameLastname”。

class Member(models.Model):
    name = models.CharField(max_length=50, verbose_name='Name')
...

    def slug(self):
        slg = self.name.replace(",", "")
        slg = slg.replace(".", "")
        slg = slg.replace("-", "")
        return slg.replace(" ", "")

在我的模板中,指向特定人员的链接可以正确使用语法“Member.slug”链接到他们网页的URL,例如“www.website.com/People/FirstnameLastname/".

在我的urls.py文件中,设置URL的行如下:

url(r'^people/(?P<member_slug>[-\w]+)/$', views.person, name='person')

这个网址设置以前对我有用。我并不精通正则表达式,但我认为这不会导致问题。

我对某人页面的看法如下:

from app.models import Member

def person(request, member_slug):
    pk_match=0
    member_list = Member.objects.all()
    for member_check in member_list:
        if member_check.slug==member_slug:
            pk_match=member_check.pk
            break
    member = get_object_or_404(Member, pk=pk_match)
    return render(request, "app/person.html", {'member': member})

该视图对我不起作用。 Django调试窗口告诉我模型没有匹配。由于某种原因,它似乎无法从视图中引用Member.slug属性。如果我手动将pk设置为有效数字,那么它将加载该用户的页面,因此错误肯定在我的查找方案中。有没有办法做到这一点,以便网站URL自动由人的名字制作,但让它在视图中正确查找个人?

1 个答案:

答案 0 :(得分:3)

Member.slug()是一种方法,因此您需要调用它,否则比较将始终为False

member_check.slug() == member_slug

或者您可以将其更改为属性,然后member_check.slug == member_slug将起作用。

@property
def slug(self):
    slg = self.name.replace(",", "")
    slg = slg.replace(".", "")
    slg = slg.replace("-", "")
    return slg.replace(" ", "")