Django:打印视图的url而不硬编码url

10 投票
3 回答
8182 浏览
提问于 2025-04-11 09:22

我可以在模板中打印出某个视图的链接 /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版本)。

撰写回答