我很难理解如何使用单个CBV处理(至少)两种不同的情况。这是我想要做的:
我想使用以下URL:
1. /myapp/list.html/
2. /myapp/detail.html/<<uuid>>/
3. /myapp/detail.html/<<uuid>>/?<layout>
方案2和3我正在考虑使用单个CBV,但我不了解如何区分方案。你能建议我的urls.py和views.py看起来像什么吗?
编辑:同时,我将需要使用两个不同的模板(或以某种方式区分要在模板中显示的内容):如果我正在调用/myapp/detail.html/<>/,那么我想查看对象详细信息。如果我正在呼叫/myapp/detail.html/<>/?我想渲染一个iframe以显示相应的报告。
谢谢!
编辑:
答案 0 :(得分:0)
对于Django 2+,请使用路径代替url
中的urls.py
urls.py
from django.urls import path, re_path
urlpatterns = [
path('/myapp/list.html/', MyModelListView.as_view(), name="mymodel_list"),
re_path(r'^/myapp/detail.html/(?P<uuid>[0-9a-f-]+)/(?P<layout>\w+)$', MyModelDetailView.as_view(), name="mymodel_detail"),
]
Views.py
from django.views.generic import ListView, DetailView
class MyModelListView(ListView):
model = MyModel
class MyModelDetailView(DetailView):
model = MyModel
def get_queryset(self):
layout = self.kwargs.get("layout", None)
uuid = self.kwargs.get("uuid")
# Your logic goes here