如何告诉 Django 视图谁调用了它?
How to tell a Django view who called it?
我有两个 Django 视图,它们呈现两个单独的模板。这些模板中的每一个都将包含一个 link 到相同的第三个视图。
第三个视图将呈现一个模板,如果第一个 Django view/template link 重定向到它应该显示一个按钮,但如果第二个 view/template [=36] 呈现一个不同的按钮=] 重定向到它。
每个模板中 link 的 URI
将如下所示:
/members/near/<from_uid>/profile/<to_uid>/
告诉第三个视图调用者的最稳健或 "best-practice" 方法是什么?我应该像下面这样创建 link 吗?
/members/near/<from_uid>/profile/<to_uid>/from/<view_name>
/members/near/<from_uid>/profile/<to_uid>/from/<view_name>
检查请求中的 HTTP
referer header 字段会更好吗?还是有其他更好的技术来做到这一点?
顺便说一下,我意识到我的 URI
不是 RESTful
,但我觉得我对 REST
的理解不够好,无法创建 RESTful URIs
,尤其是当我必须像这里使用 from_uid
和 to_uid
参数那样传递多个参数时。
谢谢!
您可以将 URL 的一部分用作参数。每个参数都将根据提供的正则表达式进行设置。这里的一个例子。一个视图可以处理包含您提到的三个参数的所有 url。
url(r'^members/near/(?P<from_uid>\d+)/profile/(?P<to_uid>\d+)/from//(?P<view_name>\W+)/$', MyView.as_view(), name = 'my_named_view')
然后在您看来,您只需从 url
中提取这些参数
from_uid = self.kwargs['from_uid']
to_uid = self.kwargs['to_uid']
view_name = self.kwargs['view_name']
if view_name == "....":
# render to template1
elif view_name == "....":
# render to template2
像这样使用 GET 参数...
模板 1:
<a href="/third/view/?from=view1">Link</a>
模板 2:
<a href="/third/view/?from=view2">Link</a>
而在您的第三个视图中...
from_view = self.request.GET.pop('from')
if from_view == 'view1':
...
elif from_view == 'view2':
...
在这种情况下,GET 参数比 URL 捕获的参数更合适。
我有两个 Django 视图,它们呈现两个单独的模板。这些模板中的每一个都将包含一个 link 到相同的第三个视图。
第三个视图将呈现一个模板,如果第一个 Django view/template link 重定向到它应该显示一个按钮,但如果第二个 view/template [=36] 呈现一个不同的按钮=] 重定向到它。
每个模板中 link 的 URI
将如下所示:
/members/near/<from_uid>/profile/<to_uid>/
告诉第三个视图调用者的最稳健或 "best-practice" 方法是什么?我应该像下面这样创建 link 吗?
/members/near/<from_uid>/profile/<to_uid>/from/<view_name>
/members/near/<from_uid>/profile/<to_uid>/from/<view_name>
检查请求中的 HTTP
referer header 字段会更好吗?还是有其他更好的技术来做到这一点?
顺便说一下,我意识到我的 URI
不是 RESTful
,但我觉得我对 REST
的理解不够好,无法创建 RESTful URIs
,尤其是当我必须像这里使用 from_uid
和 to_uid
参数那样传递多个参数时。
谢谢!
您可以将 URL 的一部分用作参数。每个参数都将根据提供的正则表达式进行设置。这里的一个例子。一个视图可以处理包含您提到的三个参数的所有 url。
url(r'^members/near/(?P<from_uid>\d+)/profile/(?P<to_uid>\d+)/from//(?P<view_name>\W+)/$', MyView.as_view(), name = 'my_named_view')
然后在您看来,您只需从 url
中提取这些参数from_uid = self.kwargs['from_uid']
to_uid = self.kwargs['to_uid']
view_name = self.kwargs['view_name']
if view_name == "....":
# render to template1
elif view_name == "....":
# render to template2
像这样使用 GET 参数...
模板 1:
<a href="/third/view/?from=view1">Link</a>
模板 2:
<a href="/third/view/?from=view2">Link</a>
而在您的第三个视图中...
from_view = self.request.GET.pop('from')
if from_view == 'view1':
...
elif from_view == 'view2':
...
在这种情况下,GET 参数比 URL 捕获的参数更合适。