Mit Django suche ich nach einer Möglichkeit, ein url patern (mit slug) zu verwenden, um ein Modell abzufragen, und wenn nichts gefunden wird, ein zweites Modell abzufragen. Ich verwende klassenbasierte Ansichten.Django: eine URL Suche in zwei Modellen (cbv)
Ich folge diesem answer, und die nächste Ansicht wird aufgerufen. Aber dann bekomme ich den folgenden Fehler:
"Generische Detailansicht muss entweder mit einem Objekt PK oder einem Slug aufgerufen werden."
Ich kann nicht herausfinden, wie man den Slug an die nächste Ansicht übergeben.
Meine url:
url(r'^(?P<slug>[-\w]+)/$', SingleView.as_view(), name='singleview'),
Mein CBV ist:
class SingleView(DetailView):
def dispatch(self, request, *args, **kwargs):
post_or_page_slug = kwargs.pop('slug')
if Page.objects.filter(slug=post_or_page_slug).count() != 0:
return PageDetailView.as_view()(request, *args, **kwargs)
elif Post.objects.filter(slug=post_or_page_slug).count() != 0:
return PostDetailView.as_view()(request, *args, **kwargs)
else:
raise Http404
class PageDetailView(DetailView):
model = Page
template_name = 'page-detail.html'
class PostDetailView(DetailView):
model = Post
template_name = 'post-detail.html'
Ich ging mit Ihrer vorgeschlagenen Lösung von überschreiben 'get_object' und' get_template_names', einfach und sauber! –