基于Django状态的url路由

2024-05-08 17:11:06 发布

您现在位置:Python中文网/ 问答频道 /正文

你好!

我很喜欢我正在开发的一个django应用程序,它可以将URL路由到响应,而不仅仅是URL字符串。在

我希望能够考虑应用程序的状态(登录的用户及其会话、数据库的内容)。这意味着两个用户可以访问完全相同的URL,但是根据他们拥有的帐户类型(例如),他们将收到不同的响应。在

一个例子

假设我的应用程序有UserAdmin用户类。他们两个都会经常访问http://some-domain.com/dashboard,但他们会看到完全不同的东西。此外,还有dashboard之外的子url,比如/dashboard/comments/dashboard/friends。同样,根据用户类,这些视图将完全不同。在

目前我做的事情是这样的:

在(网址.py)在

urlpatterns = [
    url(r'^dashboard/', include([
        url(r'^$', render_dashboard),
        url(r'^settings/$', render_dashboard_settings),
        url(r'^friends/$', render_dashboard_friends),
    ])),
]

此设置的问题是无法将当前用户考虑在内。它仍然可以工作,因为我可以将所有类型的用户帐户路由到同一个模板,并在那里使用{% if ... %}语句为不同的用户提供不同的内容。我还可以在对django.shortcuts.render的调用中使应该呈现为动态的模板的名称。但这两样东西都不是我想要的。我希望能够在早期的URL映射级别上区分用户。在

我的问题

我想做的是扩展url方法的功能以考虑状态,并基于该功能进行路由。理想的情况是这样:

^{pr2}$

不同的用户函数被调用,但是不同的用户函数现在被调用。不幸的是,user_class_based_url是我完全虚构的。理想情况下,user_class_based_url是我可以编写的自定义函数。我可以用其他类似的方式来写。在

问题:有什么方法可以让我得到这个功能吗?

针对“你甚至不应该这样设计”

我举的这个例子是为了让我的问题更快地被理解。我想要我所描述的功能,因为它对我正在构建的应用程序在很多方面都非常有用,而且我确信这将是一个比其他方法更好的方法。在

注意

我已经在使用django rest框架,以防可以用来实现这个设计。在


Tags: django方法函数用户功能应用程序url路由
2条回答

如果要为同一个URL模式使用不同的模板,请不要在urls.py中硬编码模板。相反,请路由到view function(或者,也可以路由到views.py中的一个class-based view),它根据您的条件向不同的模板进行调度。这正是views.py的用途和通常的使用方式。在

有关如何将URL路由到视图函数,请参阅Django tutorial part 3。(如果您正在学习Django,您可能需要在第1部分中start。)

在本教程中引入了render快捷方式时,对the example进行了调整,一个发送到不同模板的视图可能如下所示:

from django.shortcuts import render

from .models import Question


def index(request):
    if request.user.is_admin():
        return render(request, 'polls/admin-index.html', {})
    else:
        latest_question_list = Question.objects.order_by('-pub_date')[:5]
        context = {'latest_question_list': latest_question_list}
        return render(request, 'polls/index.html', context)

目前在Django没有任何办法做到这一点。最近,this discussion关于为url调度器创建一个新的API,但是任何更改都将在Django的未来版本中进行。在

相关问题 更多 >

    热门问题