Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将相同的第一级URL路径映射到不同的模型_Django_Django Urls - Fatal编程技术网

Django 将相同的第一级URL路径映射到不同的模型

Django 将相同的第一级URL路径映射到不同的模型,django,django-urls,Django,Django Urls,我有两个带段塞字段的模型: class Book(models.Model): name = models.CharField(max_length=200) slug = models.SlugField() class Author(models.Model): name = models.CharField(max_length=200) slug = models.SlugField() 我想将它们映射到第一级路径: (r'^(?P<slug&g

我有两个带段塞字段的模型:

class Book(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField()

class Author(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField()
我想将它们映射到第一级路径:

(r'^(?P<slug>[a-zA-Z0-9_-]+)/$', 'book_detail'),
(r'^(?P<slug>[a-zA-Z0-9_-]+)/$', 'author_detail'),
(r'^(?P[a-zA-Z0-9_-]+)/$,“书籍细节”),
(r'^(?P[a-zA-Z0-9.-]+)/$,“作者详细信息”),

如果不使用相同的函数并根据slug返回book或author,那么最好的方法是什么呢

r'^(?P<model>[a-zA-Z0-9_-]+)/(?P<slug>[a-zA-Z0-9_-]+)/$', 'some_detail')
编辑:哦,像那样平。。。这将是:

(r'^(?P<slug>[a-zA-Z0-9_-]+)/$', 'universal_detail'),

def universal_detail(request, slug):
    try:
        book = Book.objects.get(slug=slug)
        return book_detail(request, book)
    except Book.DoesNotExist:
        pass

    try:
        author = Author.objects.get(slug=slug)
        return author_details(request, author)
    except Author.DoesNotExist:
        raise Http404

 def book_detail(request, book):
    # note that book is a book instance here
    pass
(r'^(?P[a-zA-Z0-9_-]+)/$,“通用详细信息”),
def通用_详细信息(请求、slug):
尝试:
book=book.objects.get(slug=slug)
退货登记簿详细信息(请求、登记簿)
除Book.DoesNotExist外:
通过
尝试:
author=author.objects.get(slug=slug)
返回作者详细信息(请求、作者)
除Author.DoesNotExist外:
提高Http404
def记录簿详细信息(请求、记录簿):
#注意,book在这里是一个book实例
通过

最好的方法是在视图中拆分它:

r'^(?P<model>[a-zA-Z0-9_-]+)/(?P<slug>[a-zA-Z0-9_-]+)/$', 'some_detail')
编辑:哦,像那样平。。。这将是:

(r'^(?P<slug>[a-zA-Z0-9_-]+)/$', 'universal_detail'),

def universal_detail(request, slug):
    try:
        book = Book.objects.get(slug=slug)
        return book_detail(request, book)
    except Book.DoesNotExist:
        pass

    try:
        author = Author.objects.get(slug=slug)
        return author_details(request, author)
    except Author.DoesNotExist:
        raise Http404

 def book_detail(request, book):
    # note that book is a book instance here
    pass
(r'^(?P[a-zA-Z0-9_-]+)/$,“通用详细信息”),
def通用_详细信息(请求、slug):
尝试:
book=book.objects.get(slug=slug)
退货登记簿详细信息(请求、登记簿)
除Book.DoesNotExist外:
通过
尝试:
author=author.objects.get(slug=slug)
返回作者详细信息(请求、作者)
除Author.DoesNotExist外:
提高Http404
def记录簿详细信息(请求、记录簿):
#注意,book在这里是一个book实例
通过

谢谢。我想只有一个级别的网址。mysite.com/mark-twain应该归还作者,mysite.com/a-dogs-tale应该归还这本书。谢谢。我想只有一个级别的网址。mysite.com/mark-twain应该归还作者,mysite.com/a-dogs-tale应该归还这本书。