django将用户id嵌入到URL模板中的最佳实践

时间:2009-11-26 03:14:17

标签: python django

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

使用模板构建此网址的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)

我最好的选择是什么?

3 个答案:

答案 0 :(得分:8)

查看命名网址,您可以找到官方的django文档here

基本上,您可以在网址中为您的网址命名:

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

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

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

但是,这会使您的网址结构非常丑陋,并且有更好的方法可以做到这一点。例如,你可以转到/ profile /并从当前会话中检索用户ID(每个请求都有一个'user'属性,使用它)。例如,在您的视图中,您可以执行此操作:

def myview(request):
    user = request.user

随后您可以使用该信息来执行您想要的操作。比使用URL中的ID更好,您不必担心可能涉及的任何其他安全问题。

答案 1 :(得分:2)

最简单的方法 - 在模型中定义get_absolute_url方法,并根据需要与permalink装饰器结合使用。

答案 2 :(得分:-2)

您的第一次尝试与您在URLconf中列出的网址相匹配。我也会使用那种方法。