Django最佳实践:将用户ID嵌入URL模板

4 投票
3 回答
7143 浏览
提问于 2025-04-15 16:24

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

在使用模板构建这个链接时,Django的最佳实践是什么呢?

是简单地像这样吗:

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

还是说应该是:

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

我不太确定使用url模板标签的正确语法是什么。我的URL配置看起来是这样的:

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

我该怎么做才最好呢?

3 个回答

-2

你第一次尝试的方式和你在URL配置中列出的地址是匹配的。我也会用这种方法。

2

最简单的方法是,在你的模型里定义一个 get_absolute_url 方法,然后可以使用这个方法。如果你愿意的话,还可以配合 permalink 装饰器一起使用。

8

可以看看命名的URL,你可以在官方的django文档中找到相关内容,点击这里

简单来说,你可以在你的URL配置中给你的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(每次请求都有一个'user'属性,可以用它)。所以在你的视图中,你可以这样做:

def myview(request):
    user = request.user

然后你可以利用这些信息来做你想做的事情。这样比在URL中使用ID要好得多,而且你也不用担心其他可能涉及的安全问题。

撰写回答