(Django)如何将两个网址映射到一个视图?

Dan*_*nad 3 python django django-urls django-views

这是来自models.py的课程:

class Person(models.Model):
    name = models.CharField(max_length=64)
    persnr = models.AutoField(primary_key=True)
Run Code Online (Sandbox Code Playgroud)

这是我的看法:

def show_person(request, persnr):
    pers = get_object_or_404(Person, pk=persnr)
    context={'pers':pers}
    return render(request, 'company/person.html', context)
Run Code Online (Sandbox Code Playgroud)

这是我的网址:

url(r'^show_person/(?P<persnr>\d+)', "company.views.show_person", name='show_person'),
Run Code Online (Sandbox Code Playgroud)

如何使用以下两个网址进入同一视图(show_person):

server/show_person/(persnr)

server/show_person/(name)
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 6

一种稍微不同的方法是接受两个单独的参数,一个用于pk,一个用于名称:

url(r'^show_person/(?P<persnr>\d+)', "company.views.show_person", name='show_person'),
url(r'^show_person/(?P<name>\w+)', "company.views.show_person", name='show_person'),

def show_person(request, persnr=None, name=None):
    if persnr is not None:
        pers = get_object_or_404(Person, pk=persnr)
    elif name is not None:
        pers = get_object_or_404(Person, name=name)
    else:
        raise Http404
Run Code Online (Sandbox Code Playgroud)