Django:打印视图的url而不硬编码url
我可以在模板中打印出某个视图的链接 /admin/manage/products/add
吗?
这是我想要创建链接的规则
(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}),
我想在模板中使用 /manage/products/add
,但不想直接写死这个链接。我该怎么做呢?
补充说明:我并不是在使用默认的管理后台(其实我在用,但它在另一个网址),这是我自己创建的。
3 个回答
0
创建网址的推荐方法是给你的模型类添加一个 get_absolute_url
方法。你可以在这里直接写死路径,这样至少能让你更接近简单明了的原则。
你还可以更进一步,使用 permalink
装饰器,它会根据网址的配置自动找出路径。
你可以在 Django 的文档中了解更多内容,点击 这里。
2
如果你使用了命名的 URL 模式,那么在你的模板中可以这样做:
{% url create_object %}
17
你可以使用 get_absolute_url
,但这只适用于特定的对象。因为你的对象还没有被创建,所以在这种情况下它是无法使用的。
你应该使用 命名的URL模式。下面是一个简单的介绍:
把你的 urls.py 文件中的那一行改成:
(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}, "create-product"),
然后,在你的模板中可以用这个来显示URL:
{% url create-product %}
如果你使用的是Django 1.5或更高版本,你需要这个:
{% url 'create-product' %}
使用命名的URL模式你可以做一些更强大的事情,它们非常方便。请注意,这些功能只在开发版本中可用(还有1.0版本)。