你好!
我很喜欢我正在开发的一个django应用程序,它可以将URL路由到响应,而不仅仅是URL字符串。在
我希望能够考虑应用程序的状态(登录的用户及其会话、数据库的内容)。这意味着两个用户可以访问完全相同的URL,但是根据他们拥有的帐户类型(例如),他们将收到不同的响应。在
一个例子
假设我的应用程序有User
和Admin
用户类。他们两个都会经常访问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
方法的功能以考虑状态,并基于该功能进行路由。理想的情况是这样:
不同的用户函数被调用,但是不同的用户函数现在被调用。不幸的是,user_class_based_url
是我完全虚构的。理想情况下,user_class_based_url
是我可以编写的自定义函数。我可以用其他类似的方式来写。在
问题:有什么方法可以让我得到这个功能吗?
针对“你甚至不应该这样设计”
我举的这个例子是为了让我的问题更快地被理解。我想要我所描述的功能,因为它对我正在构建的应用程序在很多方面都非常有用,而且我确信这将是一个比其他方法更好的方法。在
注意
我已经在使用django rest框架,以防可以用来实现这个设计。在
如果要为同一个URL模式使用不同的模板,请不要在
urls.py
中硬编码模板。相反,请路由到view function(或者,也可以路由到views.py
中的一个class-based view),它根据您的条件向不同的模板进行调度。这正是views.py
的用途和通常的使用方式。在有关如何将URL路由到视图函数,请参阅Django tutorial part 3。(如果您正在学习Django,您可能需要在第1部分中start。)
在本教程中引入了
render
快捷方式时,对the example进行了调整,一个发送到不同模板的视图可能如下所示:目前在Django没有任何办法做到这一点。最近,this discussion关于为url调度器创建一个新的API,但是任何更改都将在Django的未来版本中进行。在
相关问题 更多 >
编程相关推荐