使用Django,我正在寻找一种方法来使用一个url patern(使用slug)来查询一个模型,如果没有找到,则查询第二个模型。我正在使用基于类的视图。
我正在关注此answer,并且正在调用下一个视图。但后来我收到以下错误:
“必须使用对象pk或slug调用通用详细信息视图。”
我无法弄清楚如何将slu pass传递给下一个View。
我的网址:
'Convert input to a date
Dim myDate As Date
myDate = DateValue("1 " & cboMonth & " " & cboYear)
'Perform the required SUMIFS
txt101 = Application.WorksheetFunction.SumIfs(Range("C:C"), _
Range("A:A"), "101", _
Range("B:B"), ">=" & myDate, _
Range("B:B"), "<=" & DateAdd("m", 1, myDate))
'txt102 =
'txt103 =
'txt104 =
'txt105 =
我的CBV:
url(r'^(?P<slug>[-\w]+)/$', SingleView.as_view(), name='singleview'),
答案 0 :(得分:0)
问题是你正在弹出slu ,,它会从kwargs中移除它。这意味着slug没有传递给视图。
您可以将其更改为:
post_or_page_slug = kwargs.pop['slug']
我通常不鼓励在另一个视图中调用MyView.as_view(request, *args, **kwargs)
。基于类的视图旨在通过子类扩展,而不是通过在其他视图中调用它们。
对于示例中的两个视图,您可以通过覆盖get_object
和get_template_names
将它们合并为一个视图。
from django.http import Http404
class PageOrPostDetailView(DetailView):
def get_object(self):
for Model in [Page, Post]:
try:
object = Model.objects.get(slug=self.kwargs['slug'])
return object
except Model.DoesNotExist:
pass
raise Http404
def get_template_names(self):
if isinstance(self.object, Page):
return ['page-detail.html']
else:
return ['post-detail.html']