如何告诉Django视图谁调用它?

时间:2015-05-04 16:11:51

标签: django django-templates django-views

我有两个Django视图,它们呈现两个独立的模板。每个模板都包含指向同一第三个视图的链接。

第三个视图将呈现一个模板,如果第一个Django视图/模板链接重定向到它,则应该显示一个按钮,但如果第二个视图/模板链接重定向到它,则呈现不同的按钮。 每个模板中链接的URI都是这样的:

/members/near/<from_uid>/profile/<to_uid>/

告诉调用它的第三个观点的最强大或“最佳实践”方法是什么?我应该创建如下链接吗?

/members/near/<from_uid>/profile/<to_uid>/from/<view_name>
/members/near/<from_uid>/profile/<to_uid>/from/<view_name>

检查请求中的HTTP referer标头字段会更好吗?或者还有其他更好的技术吗?

顺便说一下,我意识到我的URI不是RESTful,但我觉得我不能理解REST足以创建RESTful URIs,尤其是当我我必须使用from_uidto_uid参数传递多个参数。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以将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')

然后在您的视图中,您只需从网址

中提取这些参数
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

答案 1 :(得分:0)

使用像这样的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捕获参数更合适。