【问题标题】:How to tell a Django view who called it?如何告诉 Django 视图是谁调用了它?
【发布时间】:2015-07-14 02:40:33
【问题描述】:

我有两个 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>

检查请求中的HTTPreferer 标头字段会更好吗?还是有其他更好的技术可以做到这一点?

顺便说一句,我意识到我的URI 不是RESTful,但我觉得我对REST 的理解不足以创建RESTful URIs,尤其是当我必须像我一样传递多个参数时这里带有from_uidto_uid 参数。

谢谢!

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      像这样使用 GET 参数...

      模板 1:
      &lt;a href="/third/view/?from=view1"&gt;Link&lt;/a&gt;

      模板 2:
      &lt;a href="/third/view/?from=view2"&gt;Link&lt;/a&gt;

      在您的第三个视图中...
      from_view = self.request.GET.pop('from') if from_view == 'view1': ... elif from_view == 'view2': ...

      在这种情况下,GET 参数比 URL 捕获的参数更合适。

      【讨论】:

      • 感谢 ejb。我喜欢你的解决方案,但另一个更符合我的代码库。我会在未来的项目中尝试你的方法。
      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 2015-07-23
      • 1970-01-01
      • 2012-07-24
      相关资源
      最近更新 更多