我正在我的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)
我最好的选择是什么?
答案 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中列出的网址相匹配。我也会使用那种方法。