我想为个人用户和组创建具有以下模式的虚 URL 的页面example.com/<user_or_group_name>
。用户名和组名不冲突。我设置了以下 URL 模式:
path(route="<str:entity_name>", view=...)
我对用户页面和组页面有两个不同的视图。我想根据user_or_group_name
URL 中是 aGroup
还是 a来使用任一视图User
。
class GroupPage(DetailView):
template_name = "userprofile/group_page.html"
model = Group
class UserPage(DetailView):
template_name = "userprofile/user_page.html"
model = User
我知道不可能查看相同的 URL 模式。
我可以构建一个统一的视图,并根据user_or_group_name
是 aUser
还是 a 来选择对象和模板Group
。然而,这感觉是被迫的。
我想过将 URL 路由到调度函数(如下),但是中间件AttributeError: 'function' object has no attribute 'get'
引发了返回clickjacking
。
def page_dispatch(request, entity_name):
try:
User.objects.get(username=entity_name)
return UserPage.as_view
except User.DoesNotExist:
return InstitutionPage.as_view
如何根据 URL 是指用户还是组来选择视图?感谢您的帮助。
您尝试的问题在于您正在返回as_view
类的方法。视图总是应该返回一个HttpResponse
对象(除非引发/发生某些异常)。该as_view
方法的作用是创建一个函数(这将充当实际视图)并返回该as_view
函数,因此您可以调用call 返回的函数并返回该函数:
def page_dispatch(request, entity_name):
try:
User.objects.get(username=entity_name)
return UserPage.as_view()(request, entity_name=entity_name)
except User.DoesNotExist:
return InstitutionPage.as_view()(request, entity_name=entity_name)
虽然我会说两个不同页面的单独 url 模式更好,因为这也将允许具有相同名称的用户和组存在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句