Django url通用视图的反转

Django url通用视图的反转,django,django-urls,Django,Django Urls,这一主题是我们的思想的延续。在一般视图中,我遇到了反向问题。上次我认为这不是反向匹配,因为我使用了多对多,现在我没有反向的多对***关系,但问题仍然存在。因为在这两种情况下,我在URL中都有通用视图,所以我建议问题出在通用视图中,而没有视图函数。 起初,我在模型中使用@permalink decorator ... @permalink def get_absolute_url(self): return ('categories', str(self.id)) ... @permali

这一主题是我们的思想的延续。在一般视图中,我遇到了反向问题。上次我认为这不是反向匹配,因为我使用了多对多,现在我没有反向的多对***关系,但问题仍然存在。因为在这两种情况下,我在URL中都有通用视图,所以我建议问题出在通用视图中,而没有视图函数。 起初,我在模型中使用@permalink decorator

...
@permalink
def get_absolute_url(self):
    return ('categories', str(self.id))
...
@permalink
def get_absolute_url(self):
    return ('pages', (), {'page_name': self.human_readable_url})
网址

并且有同样的错误

NoReverseMatch:找不到参数为“(2,)”且关键字参数为“{}”的“类别”的反转


基于permalink没有显式使用反向方法的事实,我认为问题在于url中的交互反向和通用视图。为什么会这样?如何在url通用视图中使用reverse?

问题是,您为通用视图指定了名称
categories
,并且您正在向该视图传递一个参数-但不接受该参数,只接受一个包含额外上下文的字典

如果希望将其他参数传递给泛型视图,则可以,但它们将只传递给模板。您可以编写自己的函数,将参数添加到字典中,然后调用泛型视图。大概是这样的:

# views.py
from django.views.generic.simple import direct_to_template

def my_view(id):
    more_data = {'id': id}
    return direct_to_template(template = 'basic.djhtml', more_data)
然后在
urls.py
中,用
my\u视图
替换
direct\u to\u模板
。由于
my_view
采用
id
参数,
reverse
将正确匹配该参数,该参数将传递到通用视图,并通过模板传递

大概在模板的某个地方有一行,比如,
{{id}

def get_absolute_url(self):
    return reverse('categories', args = [self.id, ])
# views.py
from django.views.generic.simple import direct_to_template

def my_view(id):
    more_data = {'id': id}
    return direct_to_template(template = 'basic.djhtml', more_data)