Django最佳实践:将用户ID嵌入URL模板
我正在我的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要好得多,而且你也不用担心其他可能涉及的安全问题。