Wie man einen reverse-URL für eine generische Ansicht?
Hier ist die Frage wie verwende ich die Rückseite für die generische Sicht object_detail?
Wenn ich es verwenden, wie die folgenden Fehlermeldung werden:
NoReverseMatch at /comment/add/
Reverse für "mit den Argumenten' () ' - und Schlüsselwort-Argumente '{}' nicht gefunden.
in views.py:
urlresolvers.reverse('django.views.generic.list_detail.object_detail')
return HttpResponseRedirect(resp)
in urls.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),
)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur so zu verwenden, Rückseite mit generic views - named urls config.
Diese Frage scheint für ältere Versionen von Django. Ich bin nicht vertraut mit, wie die alten generischen Aussicht auf Arbeit. Aber die neuen class-based generic views haben das gleiche problem.
Umkehrung funktioniert nicht "out of the box", weil Anzeigen.as_view() gibt ein anderes wrapper-Funktion jedes mal, und Sie vergleichen Sie nicht einander gleich, so reverse() nicht finden können, die umgekehrte route durch den Vergleich von zwei Funktionen, die nicht gleich sind.
Gibt es einen anderen Weg, obwohl es nicht standard. Dies ist, was ich für meine class-based views:
In diesem Fall verwende ich
plain_view
bedeuten die Ansicht zurückgegebenas_view()
ohne Argumente. Wenn Sie Argumente anas_view()
, dann wird der wrapper es gibt tatsächlich anders in die Ebene ein. Also, wenn Sie benötigen, müssten Sie diese unterschiedlichen Eigenschaften zuordnen:Können Sie einen link zu dieser Attribute anzeigen " in
urls.py
:dann können Sie diese rückgängig machen, indem er die Attribute anzeigen:
Fand ich die beste Lösung, verwenden Sie reverse_lazy():
https://docs.djangoproject.com/en/1.5/ref/urlresolvers/#reverse-lazy