【问题标题】:One url for two different views两个不同视图的一个网址
【发布时间】:2014-12-21 16:46:19
【问题描述】:

我正在开发一个具有两种用户类型的网站,并且项目的所有者在用户通过身份验证后想要两个不同的主页(模板),所以,我尝试了这个:

网址

# home a
url(r'^home/$', HomeAView.as_view(), name='home-a'),
# home b
url(r'^home/$', HomeBView.as_view(), name='home-b'),

在我的登录视图中也有一些类似的内容:

if user.typeUser == "HA":
    print('Go to Home A')
    return redirect(reverse('sesion:home-a'))
else:
    print('Go to Home B')
    return redirect(reverse('sesion:home-b'))

所以问题是用户通过身份验证后,网站总是跳转到第一个url! (Home A)我通过控制台打印了一个小标志并且条件有效,并通过了会话:home-a或home-b,但总是去home-a。如果我分配了不同的名称,为什么反向不解析 url?我不能有两个视图的一个网址吗??

感谢您的帮助,我正在开发 Django 1.7

【问题讨论】:

    标签: django django-templates django-views django-urls django-1.7


    【解决方案1】:

    不,您不能对同一个 URL 有两个不同的视图。 Django 根据定义的 URL 和路由决定使用哪个视图函数。

    在唯一视图中使用自定义代码根据用户类型呈现不同的模板:

    def home(request):
        if user.typeUser == "HA":
            render(request, 'template_a.html')
        else:
            render(request, 'template_b.html')
    

    【讨论】:

    • 感谢您的帮助!!但是,我阅读了这个文档docs.djangoproject.com/en/1.7/topics/http/urls 并且,我知道这是可能的,我将 home-a 分离到另一个应用程序中,并添加了命名空间,但不起作用,我重定向到 test:home-a 和会话:home-b,但总是去 Home A...
    • 对于使用不同名称空间的不同视图,您可以使用相同的 URL 名称url 函数中的 name 参数),但不能相同工作 URL 正则表达式模式url 函数的第一个参数)指向两个不同的视图。 Django 将不得不任意决定使用哪个视图。
    猜你喜欢
    • 2017-07-23
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2021-04-22
    • 2018-10-22
    相关资源
    最近更新 更多