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