【问题标题】:django embedding user id into URL template best practicedjango 将用户 ID 嵌入 URL 模板最佳实践
【发布时间】:2010-12-20 13:21:33
【问题描述】:

我正在我的 django 应用程序中构建一个导航菜单,其中一个选项是“我的帐户”。我为用户设置了不同的角色,但为了让他们都能查看他们的个人资料,我使用了一个通用 URL,例如 http://mysite/user//profile。

使用模板构建此 url 的 Django 最佳实践是什么?

是不是很简单:

<a href="/user/{{ user.id }}/profile">My Account</a>

或者是:

<a href="{{ url something something }}">My Account</a>

不完全确定使用 url 模板标签的适当语法是什么。这是我的 URLconf 的样子:

(r'^user/(?P<user_id>\d+)/profile/$', user_profile)

我最好的选择是什么?

【问题讨论】:

    标签: python django


    【解决方案1】:

    查看命名的 URL,你可以找到官方的 django 文档here

    基本上你可以在你的 URL conf 中这样命名你的 URL:

    url(r'^user/(?P<user_id>\d+)/profile/$', 'yourapp.views.view', name='user_url')
    

    然后在任何模板中,您都可以这样做:

    <a href="{% url user_url user.id %}">
    

    但是,这会使您的 URL 结构变得非常丑陋,并且有更好的方法可以做到这一点。例如,您可以转到 /profile/ 并从当前会话中检索用户 ID(每个请求都有一个“用户”属性,请使用它)。例如,在您看来,您可以这样做:

    def myview(request):
        user = request.user
    

    随后您可以使用该信息来做您想做的事。比在 URL 中使用 id 好得多,而且您不必担心可能涉及的任何其他安全问题。

    【讨论】:

    【解决方案2】:

    最简单的方法 - 在您的模型中定义一个 get_absolute_url 方法并使用它,如果您愿意,可以与 permalink 装饰器一起使用。

    【讨论】:

    【解决方案3】:

    您的第一次尝试与您的 URLconf 中列出的 url 匹配。我也会使用这种方法。

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 2011-12-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2012-04-27
      • 1970-01-01
      • 2018-06-30
      相关资源
      最近更新 更多