我正在组建一个网站,其中包含组织中的人员目录。在模型中,一个人有一个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自动由人的名字制作,但让它在视图中正确查找个人?
答案 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(" ", "")