Django:在不对网址进行硬编码的情况下打印视图网址
时间:2020-03-05 18:48:37 来源:igfitidea点击:
我可以在模板中打印出某个视图的网址" / admin / manage / products / add"吗?
这是我要为其创建链接的规则
(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}),
我希望在不对模板进行硬编码的情况下将/ manage / products / add添加到模板中。我怎样才能做到这一点?
编辑:我没有使用默认的管理员(嗯,我是,但是它在另一个URL),这是我自己的
解决方案
回答
如果我们使用命名的网址格式,则可以在模板中进行以下操作
{% url create_object %}
回答
创建URL的首选方法是在模型类中添加get_absolute_url
方法。我们可以在此处对路径进行硬编码,因此至少可以更进一步遵循KISS哲学。
我们可以利用"永久链接"修饰符来进一步了解,该修饰符根据url配置确定路径。
我们可以在django文档中阅读更多内容。
回答
我们可以使用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)中。