Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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_Reverse - Fatal编程技术网

Django 如何获取通用视图的反向URL?

Django 如何获取通用视图的反向URL?,django,reverse,Django,Reverse,这里有一个问题,我如何对常规视图对象_细节使用reverse 如果我像下面那样使用它,错误消息将是: NoReverseMatch at/comment/add/ 找不到参数为“()”且关键字参数为“{}”的“”的反转 在views.py中: urlresolvers.reverse('django.views.generic.list_detail.object_detail') return HttpResponseRedirect(resp) 在URL.py中

这里有一个问题,我如何对常规视图对象_细节使用reverse

如果我像下面那样使用它,错误消息将是: NoReverseMatch at/comment/add/ 找不到参数为“()”且关键字参数为“{}”的“”的反转

在views.py中:

urlresolvers.reverse('django.views.generic.list_detail.object_detail')
              return HttpResponseRedirect(resp)
在URL.py中

common_info_dict = {
    'extra_context':{
         'blogtitle':"Thinking",
         'blogsubtitle':"- blog system",
         'articles_count':Entry.objects.count,
         'comments_count': 0,
         'visitors_count' : 0,
         'category_list':Category.objects.all,
         'tag_list':Tag.objects.all,
         'comment_form': CommentForm,
    },
}

object_detail_info_dict = {
    'queryset': Entry.objects.all(),
    'slug_field': 'slug',
    'template_object_name': 'post',
}

object_detail_info_dict.update(common_info_dict)

    urlpatterns += patterns('django.views.generic.list_detail',
       (r'^posts/(?P<slug>[-\w]+)/$', 'object_detail', object_detail_info_dict),
    )
common\u info\u dict={
“额外上下文”:{
“博客标题”:“思考”,
'博客字幕':“-博客系统”,
“项目计数”:Entry.objects.count,
“注释计数”:0,
“访客计数”:0,
“类别列表”:category.objects.all,
“标记列表”:tag.objects.all,
“注释形式”:注释形式,
},
}
对象\详细信息\信息\指令={
'queryset':Entry.objects.all(),
“slug_字段”:“slug”,
“模板对象名称”:“发布”,
}
对象详细信息目录更新(通用信息目录)
urlpatterns+=模式('django.views.generic.list_detail',
(r“^posts/(?P[-\w]+)/$”,“对象详细信息”,对象详细信息,
)

在常规视图中使用reverse的唯一方法-配置

urlpatterns+=patterns('django.views.generic.list_detail',
(r“^posts/(?P[-\w]+)/$”,“对象详细信息”,
对象“详细信息”命令“发布详细信息”),
)
反向('post_detail',args=('foobar',))

这个问题似乎适用于Django的旧版本。我不熟悉旧的通用视图是如何工作的。但是新的基于类的泛型视图也有同样的问题

反转“开箱即用”不起作用,因为View.as_View()每次返回不同的包装函数,并且它们之间的比较不相等,所以reverse()无法通过比较两个不相等的函数来找到反转路径

还有另一种方法,尽管它是非标准的。这是我为基于类的视图所做的:

class OrderView(LoginRequiredMixin, CreateView):
    model = Order
    form_class = OrderForm

OrderView.plain_view = staticmethod(OrderView.as_view())
在本例中,我使用
plain\u view
表示
as\u view()
返回的没有参数的视图。如果将参数作为_view()传递给
,那么它返回的包装器实际上与普通包装器不同。因此,如果两者都需要,则必须将它们指定给不同的属性:

OrderView.plain_view = staticmethod(OrderView.as_view())
OrderView.bonk_view = staticmethod(OrderView.as_view(whee='bonk'))
您可以在
url.py
中链接到这些视图属性:

urlpatterns = patterns('',
    url(r'^order/$', views.OrderView.plain_view),
    url(r'^frob/$', views.OrderView.bonk_view),
然后可以通过反转视图属性来反转它们:

def get_success_url(self):
    return reverse(OrderView.plain_view)

def get_failure_url(self):
    return reverse(OrderView.bonk_view)

我找到了最好的解决方案,使用reverse_lazy():


这个答案说明了问题的本质,它更好。
def get_success_url(self):
    return reverse(OrderView.plain_view)

def get_failure_url(self):
    return reverse(OrderView.bonk_view)