如何在 Django 模板中将 get_absolute_url() 与外键对象一起使用
How to Use get_absolute_url() with a foreign key object in Django template
我对 django 比较陌生,我已经搜索过这个问题,但找不到解决方案。如果解决方案很明显但我似乎无法正确解决,请原谅我。
所以,这就是问题所在。我有两个模型 Parishioner 和 Community。 Parishioner 与 Community 具有多对一的关系。在 parishioner_detail 页面上,我试图将社区名称显示为 link 到 community_detail 页面。我觉得我没有正确使用 get_absolute_url() 方法。任何帮助将不胜感激。
型号:
from django.db import models
from django.core.urlresolvers import reverse
class Community(models.Model):
name = models.CharField(max_length=41)
description = models.TextField()
leader = models.CharField(max_length=41)
email = models.EmailField()
phone_number = models.CharField(max_length=20)
slug = models.SlugField(max_length=31, unique=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('people_community_detail', kwargs={'slug': self.slug})
class Parishioner(models.Model):
name = models.CharField(max_length=41)
date_of_birth = models.DateField('date of birth', blank=True)
email = models.EmailField()
phone_number = models.CharField(max_length=20)
start_date = models.DateField('date posted')
societies = models.ManyToManyField(Society, blank=True, related_name='parishoners')
communities = models.ForeignKey(Community, blank=True, related_name='parishoners')
sacraments = models.ManyToManyField(Sacrament, blank=True, related_name='parishoners')
slug = models.SlugField(max_length=31, unique=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('people_parishioner_detail', kwargs={'slug': self.slug})
class meta:
ordering = ['name']
verbose_name_plural = "parishioners"
观看次数:
from django.shortcuts import get_object_or_404, render, redirect
from .models import Society, Community, Sacrament, Festival, Parishioner
def community_list(request):
return render(request, 'people/community_list.html', {'community_list': Community.objects.all()})
def community_detail(request, slug):
community = get_object_or_404(Community, slug__iexact=slug)
return render(request, 'people/community_detail.html', {'community': community})
def parishioner_list(request):
return render(request, 'people/parishioner_list.html', {'parishioner_list': Parishioner.objects.all()})
def parishioner_detail(request, slug):
parishioner = get_object_or_404(Parishioner, slug__iexact=slug)
return render(request, 'people/parishioner_detail.html', {'parishioner': parishioner})
parishioner_detail.html:
<dt>Community</dt>
<dd><a href="{{ community.get_absolute_url }}">{{ parishioner.communities|title }}</a></dd>
<dt>Societies</dt>
{% for society in parishioner.societies.all %}
<dd><a href="{{ society.get_absolute_url }}">{{ society.name|title }}</a></dd>
{% endfor %}
社团名称 link 正确进入 society_detail 页面,但社区名称 link 进入 parishioner_detail 页面而不是 community_detail 页面.它基本上会重新加载页面。
如有任何帮助,我们将不胜感激。
谢谢
community
名称在您的上下文中不存在,因此 href link 为空,您将重定向到同一页面。
你可能应该这样做:
<dt>Community</dt>
<dd><a href="{{ parishioner.communities.get_absolute_url }}">{{ parishioner.communities|title }}</a></dd>
最好将 communities
字段更改为单数(即 community
),因为它是外键字段,因此不会造成混淆;一个社区(不是多个社区)的一个教区居民。
我对 django 比较陌生,我已经搜索过这个问题,但找不到解决方案。如果解决方案很明显但我似乎无法正确解决,请原谅我。
所以,这就是问题所在。我有两个模型 Parishioner 和 Community。 Parishioner 与 Community 具有多对一的关系。在 parishioner_detail 页面上,我试图将社区名称显示为 link 到 community_detail 页面。我觉得我没有正确使用 get_absolute_url() 方法。任何帮助将不胜感激。
型号:
from django.db import models
from django.core.urlresolvers import reverse
class Community(models.Model):
name = models.CharField(max_length=41)
description = models.TextField()
leader = models.CharField(max_length=41)
email = models.EmailField()
phone_number = models.CharField(max_length=20)
slug = models.SlugField(max_length=31, unique=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('people_community_detail', kwargs={'slug': self.slug})
class Parishioner(models.Model):
name = models.CharField(max_length=41)
date_of_birth = models.DateField('date of birth', blank=True)
email = models.EmailField()
phone_number = models.CharField(max_length=20)
start_date = models.DateField('date posted')
societies = models.ManyToManyField(Society, blank=True, related_name='parishoners')
communities = models.ForeignKey(Community, blank=True, related_name='parishoners')
sacraments = models.ManyToManyField(Sacrament, blank=True, related_name='parishoners')
slug = models.SlugField(max_length=31, unique=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('people_parishioner_detail', kwargs={'slug': self.slug})
class meta:
ordering = ['name']
verbose_name_plural = "parishioners"
观看次数:
from django.shortcuts import get_object_or_404, render, redirect
from .models import Society, Community, Sacrament, Festival, Parishioner
def community_list(request):
return render(request, 'people/community_list.html', {'community_list': Community.objects.all()})
def community_detail(request, slug):
community = get_object_or_404(Community, slug__iexact=slug)
return render(request, 'people/community_detail.html', {'community': community})
def parishioner_list(request):
return render(request, 'people/parishioner_list.html', {'parishioner_list': Parishioner.objects.all()})
def parishioner_detail(request, slug):
parishioner = get_object_or_404(Parishioner, slug__iexact=slug)
return render(request, 'people/parishioner_detail.html', {'parishioner': parishioner})
parishioner_detail.html:
<dt>Community</dt>
<dd><a href="{{ community.get_absolute_url }}">{{ parishioner.communities|title }}</a></dd>
<dt>Societies</dt>
{% for society in parishioner.societies.all %}
<dd><a href="{{ society.get_absolute_url }}">{{ society.name|title }}</a></dd>
{% endfor %}
社团名称 link 正确进入 society_detail 页面,但社区名称 link 进入 parishioner_detail 页面而不是 community_detail 页面.它基本上会重新加载页面。
如有任何帮助,我们将不胜感激。 谢谢
community
名称在您的上下文中不存在,因此 href link 为空,您将重定向到同一页面。
你可能应该这样做:
<dt>Community</dt>
<dd><a href="{{ parishioner.communities.get_absolute_url }}">{{ parishioner.communities|title }}</a></dd>
最好将 communities
字段更改为单数(即 community
),因为它是外键字段,因此不会造成混淆;一个社区(不是多个社区)的一个教区居民。