根据 slug 是指用户还是组使用不同的视图

尼哈勒姆

我想为个人用户和组创建具有以下模式的虚 URL 的页面example.com/<user_or_group_name>用户名和组名不冲突。我设置了以下 URL 模式:

path(route="<str:entity_name>", view=...)

我对用户页面和组页面有两个不同的视图。我想根据user_or_group_nameURL 中是 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章